@opengeni/contracts 1.3.0 → 1.4.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.
- package/dist/agent-config.d.ts +1 -0
- package/dist/atlassian.js +2 -2
- package/dist/{chunk-RYEHNSO7.js → chunk-TCXCRBPF.js} +45 -10
- package/dist/chunk-TCXCRBPF.js.map +1 -0
- package/dist/{chunk-AIEC5DTX.js → chunk-UDKWSRES.js} +2 -2
- package/dist/{chunk-LLFQJL3S.js → chunk-YFEAAOBX.js} +85 -7
- package/dist/chunk-YFEAAOBX.js.map +1 -0
- package/dist/connect.js +2 -2
- package/dist/connection-authority.js +3 -3
- package/dist/google-drive.js +2 -2
- package/dist/host-mcp-bindings.js +3 -3
- package/dist/index.d.ts +42 -1
- package/dist/index.js +6 -2
- package/dist/mcp-structured-content.d.ts +25 -0
- package/dist/personal-github.js +2 -2
- package/dist/tool-action-review.d.ts +2 -0
- package/dist/tool-review-presentation.js +1 -1
- package/dist/transcription-recordings.d.ts +21 -0
- package/package.json +1 -1
- package/src/agent-config.ts +4 -1
- package/src/index.ts +25 -1
- package/src/mcp-structured-content.ts +81 -0
- package/src/tool-action-review.ts +1 -0
- package/src/tool-review-presentation.ts +76 -14
- package/src/transcription-recordings.ts +3 -0
- package/dist/chunk-LLFQJL3S.js.map +0 -1
- package/dist/chunk-RYEHNSO7.js.map +0 -1
- /package/dist/{chunk-AIEC5DTX.js.map → chunk-UDKWSRES.js.map} +0 -0
package/dist/connect.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
IntegrationInstanceKey,
|
|
3
3
|
IntegrationSource
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-YFEAAOBX.js";
|
|
5
5
|
import "./chunk-4JGHSSB7.js";
|
|
6
6
|
import "./chunk-5IXYF6XN.js";
|
|
7
7
|
import "./chunk-NRMCVHAU.js";
|
|
@@ -16,7 +16,7 @@ import "./chunk-YRKRZ6OF.js";
|
|
|
16
16
|
import "./chunk-2VORLN2R.js";
|
|
17
17
|
import "./chunk-GRG7PHWQ.js";
|
|
18
18
|
import "./chunk-YRXAWWCU.js";
|
|
19
|
-
import "./chunk-
|
|
19
|
+
import "./chunk-TCXCRBPF.js";
|
|
20
20
|
import "./chunk-2ACYHZFB.js";
|
|
21
21
|
import "./chunk-KHHZTBP7.js";
|
|
22
22
|
import "./chunk-YBW5JSA3.js";
|
|
@@ -6,8 +6,8 @@ import {
|
|
|
6
6
|
ConnectionUseAuthorizationResult,
|
|
7
7
|
ConnectionUseDenialReason,
|
|
8
8
|
ConnectionUseSelectionSource
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import "./chunk-
|
|
9
|
+
} from "./chunk-UDKWSRES.js";
|
|
10
|
+
import "./chunk-YFEAAOBX.js";
|
|
11
11
|
import "./chunk-4JGHSSB7.js";
|
|
12
12
|
import "./chunk-5IXYF6XN.js";
|
|
13
13
|
import "./chunk-NRMCVHAU.js";
|
|
@@ -22,7 +22,7 @@ import "./chunk-YRKRZ6OF.js";
|
|
|
22
22
|
import "./chunk-2VORLN2R.js";
|
|
23
23
|
import "./chunk-GRG7PHWQ.js";
|
|
24
24
|
import "./chunk-YRXAWWCU.js";
|
|
25
|
-
import "./chunk-
|
|
25
|
+
import "./chunk-TCXCRBPF.js";
|
|
26
26
|
import "./chunk-2ACYHZFB.js";
|
|
27
27
|
import "./chunk-KHHZTBP7.js";
|
|
28
28
|
import "./chunk-YBW5JSA3.js";
|
package/dist/google-drive.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ConnectionMetadata
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-YFEAAOBX.js";
|
|
4
4
|
import "./chunk-4JGHSSB7.js";
|
|
5
5
|
import "./chunk-5IXYF6XN.js";
|
|
6
6
|
import "./chunk-NRMCVHAU.js";
|
|
@@ -18,7 +18,7 @@ import "./chunk-YRKRZ6OF.js";
|
|
|
18
18
|
import "./chunk-2VORLN2R.js";
|
|
19
19
|
import "./chunk-GRG7PHWQ.js";
|
|
20
20
|
import "./chunk-YRXAWWCU.js";
|
|
21
|
-
import "./chunk-
|
|
21
|
+
import "./chunk-TCXCRBPF.js";
|
|
22
22
|
import "./chunk-2ACYHZFB.js";
|
|
23
23
|
import "./chunk-KHHZTBP7.js";
|
|
24
24
|
import "./chunk-YBW5JSA3.js";
|
|
@@ -3,14 +3,14 @@ import {
|
|
|
3
3
|
} from "./chunk-KR2V42UZ.js";
|
|
4
4
|
import {
|
|
5
5
|
ConnectionUseAuthoritySnapshot
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-UDKWSRES.js";
|
|
7
7
|
import {
|
|
8
8
|
HostMcpCreateSelections,
|
|
9
9
|
ManagedUserResourceGrantMode,
|
|
10
10
|
McpServerConnectionRef,
|
|
11
11
|
SessionTenancyVisibility,
|
|
12
12
|
stableJson
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-YFEAAOBX.js";
|
|
14
14
|
import "./chunk-4JGHSSB7.js";
|
|
15
15
|
import "./chunk-5IXYF6XN.js";
|
|
16
16
|
import "./chunk-NRMCVHAU.js";
|
|
@@ -25,7 +25,7 @@ import "./chunk-YRKRZ6OF.js";
|
|
|
25
25
|
import "./chunk-2VORLN2R.js";
|
|
26
26
|
import "./chunk-GRG7PHWQ.js";
|
|
27
27
|
import "./chunk-YRXAWWCU.js";
|
|
28
|
-
import "./chunk-
|
|
28
|
+
import "./chunk-TCXCRBPF.js";
|
|
29
29
|
import "./chunk-2ACYHZFB.js";
|
|
30
30
|
import "./chunk-KHHZTBP7.js";
|
|
31
31
|
import "./chunk-YBW5JSA3.js";
|
package/dist/index.d.ts
CHANGED
|
@@ -42,6 +42,7 @@ export * from "./editable-artifact-serialized-commit.js";
|
|
|
42
42
|
export * from "./signup-attribution.js";
|
|
43
43
|
export * from "./product-lifecycle-facts.js";
|
|
44
44
|
export * from "./tool-catalog.js";
|
|
45
|
+
export * from "./mcp-structured-content.js";
|
|
45
46
|
export * from "./mcp-oauth.js";
|
|
46
47
|
export * from "./tool-result-spill.js";
|
|
47
48
|
export * from "./interaction.js";
|
|
@@ -1295,8 +1296,11 @@ export declare const WorkspaceTranscriptionTarget: z.ZodObject<{
|
|
|
1295
1296
|
}, z.core.$strict>;
|
|
1296
1297
|
export type WorkspaceTranscriptionTarget = z.infer<typeof WorkspaceTranscriptionTarget>;
|
|
1297
1298
|
export declare const TranscriptionErrorCode: z.ZodEnum<{
|
|
1299
|
+
allowance_exhausted: "allowance_exhausted";
|
|
1298
1300
|
cancelled: "cancelled";
|
|
1301
|
+
insufficient_credits: "insufficient_credits";
|
|
1299
1302
|
invalid_audio: "invalid_audio";
|
|
1303
|
+
monthly_model_cost_limit: "monthly_model_cost_limit";
|
|
1300
1304
|
network: "network";
|
|
1301
1305
|
not_supported: "not_supported";
|
|
1302
1306
|
permission_denied: "permission_denied";
|
|
@@ -1310,8 +1314,11 @@ export declare const TranscriptionErrorCode: z.ZodEnum<{
|
|
|
1310
1314
|
export type TranscriptionErrorCode = z.infer<typeof TranscriptionErrorCode>;
|
|
1311
1315
|
/** Stable user-safe error codes for the native voice-input transcription path. */
|
|
1312
1316
|
export declare const VoiceInputErrorCode: z.ZodEnum<{
|
|
1317
|
+
allowance_exhausted: "allowance_exhausted";
|
|
1313
1318
|
cancelled: "cancelled";
|
|
1319
|
+
insufficient_credits: "insufficient_credits";
|
|
1314
1320
|
invalid_audio: "invalid_audio";
|
|
1321
|
+
monthly_model_cost_limit: "monthly_model_cost_limit";
|
|
1315
1322
|
network: "network";
|
|
1316
1323
|
not_supported: "not_supported";
|
|
1317
1324
|
permission_denied: "permission_denied";
|
|
@@ -1466,8 +1473,11 @@ export declare const TranscriptionEvent: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
|
1466
1473
|
occurredAt: z.ZodString;
|
|
1467
1474
|
type: z.ZodLiteral<"session.error">;
|
|
1468
1475
|
code: z.ZodEnum<{
|
|
1476
|
+
allowance_exhausted: "allowance_exhausted";
|
|
1469
1477
|
cancelled: "cancelled";
|
|
1478
|
+
insufficient_credits: "insufficient_credits";
|
|
1470
1479
|
invalid_audio: "invalid_audio";
|
|
1480
|
+
monthly_model_cost_limit: "monthly_model_cost_limit";
|
|
1471
1481
|
network: "network";
|
|
1472
1482
|
not_supported: "not_supported";
|
|
1473
1483
|
permission_denied: "permission_denied";
|
|
@@ -1559,6 +1569,7 @@ export type WorkspaceTranscriptionPolicy = z.infer<typeof WorkspaceTranscription
|
|
|
1559
1569
|
* preferred billing route; credentials and model configuration remain private.
|
|
1560
1570
|
*/
|
|
1561
1571
|
export declare const VoiceInputProviderId: z.ZodEnum<{
|
|
1572
|
+
"azure-mai": "azure-mai";
|
|
1562
1573
|
"azure-openai": "azure-openai";
|
|
1563
1574
|
"codex-subscription": "codex-subscription";
|
|
1564
1575
|
openai: "openai";
|
|
@@ -1568,6 +1579,7 @@ export type VoiceInputProviderId = z.infer<typeof VoiceInputProviderId>;
|
|
|
1568
1579
|
export declare const WorkspaceVoiceInputSettings: z.ZodObject<{
|
|
1569
1580
|
enabled: z.ZodBoolean;
|
|
1570
1581
|
preferredProvider: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
1582
|
+
"azure-mai": "azure-mai";
|
|
1571
1583
|
"azure-openai": "azure-openai";
|
|
1572
1584
|
"codex-subscription": "codex-subscription";
|
|
1573
1585
|
openai: "openai";
|
|
@@ -1969,6 +1981,7 @@ export declare const WorkspaceSessionToolDefaultsPatch: z.ZodObject<{
|
|
|
1969
1981
|
export declare const ClientVoiceInputConfig: z.ZodObject<{
|
|
1970
1982
|
available: z.ZodBoolean;
|
|
1971
1983
|
providers: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
1984
|
+
"azure-mai": "azure-mai";
|
|
1972
1985
|
"azure-openai": "azure-openai";
|
|
1973
1986
|
"codex-subscription": "codex-subscription";
|
|
1974
1987
|
openai: "openai";
|
|
@@ -2346,6 +2359,7 @@ export declare const WorkspaceSettingsSchema: z.ZodObject<{
|
|
|
2346
2359
|
voiceInput: z.ZodOptional<z.ZodObject<{
|
|
2347
2360
|
enabled: z.ZodBoolean;
|
|
2348
2361
|
preferredProvider: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
2362
|
+
"azure-mai": "azure-mai";
|
|
2349
2363
|
"azure-openai": "azure-openai";
|
|
2350
2364
|
"codex-subscription": "codex-subscription";
|
|
2351
2365
|
openai: "openai";
|
|
@@ -2687,6 +2701,7 @@ export declare const UpdateWorkspaceSettingsRequest: z.ZodObject<{
|
|
|
2687
2701
|
voiceInput: z.ZodOptional<z.ZodObject<{
|
|
2688
2702
|
enabled: z.ZodBoolean;
|
|
2689
2703
|
preferredProvider: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
2704
|
+
"azure-mai": "azure-mai";
|
|
2690
2705
|
"azure-openai": "azure-openai";
|
|
2691
2706
|
"codex-subscription": "codex-subscription";
|
|
2692
2707
|
openai: "openai";
|
|
@@ -9048,7 +9063,10 @@ export type CodexRealtimeWebrtcRequest = z.infer<typeof CodexRealtimeWebrtcReque
|
|
|
9048
9063
|
export declare const CodexRealtimeWebrtcResponse: z.ZodObject<{
|
|
9049
9064
|
sdp: z.ZodString;
|
|
9050
9065
|
version: z.ZodLiteral<"v3">;
|
|
9051
|
-
model: z.
|
|
9066
|
+
model: z.ZodEnum<{
|
|
9067
|
+
"gpt-live-1-boulder-alpha": "gpt-live-1-boulder-alpha";
|
|
9068
|
+
"opengeni-azure/gpt-live-1": "opengeni-azure/gpt-live-1";
|
|
9069
|
+
}>;
|
|
9052
9070
|
connectionId: z.ZodString;
|
|
9053
9071
|
connectionEpoch: z.ZodNumber;
|
|
9054
9072
|
startupFenceSequence: z.ZodNumber;
|
|
@@ -9291,6 +9309,7 @@ export declare const SyncSessionRealtimeLedgerResponse: z.ZodObject<{
|
|
|
9291
9309
|
export type SyncSessionRealtimeLedgerResponse = z.infer<typeof SyncSessionRealtimeLedgerResponse>;
|
|
9292
9310
|
export declare const SessionRealtimeModel: z.ZodEnum<{
|
|
9293
9311
|
"gpt-live-1-boulder-alpha": "gpt-live-1-boulder-alpha";
|
|
9312
|
+
"opengeni-azure/gpt-live-1": "opengeni-azure/gpt-live-1";
|
|
9294
9313
|
"opengeni-gateway/openai/gpt-realtime-2.1": "opengeni-gateway/openai/gpt-realtime-2.1";
|
|
9295
9314
|
"opengeni-gateway/openai/gpt-realtime-mini": "opengeni-gateway/openai/gpt-realtime-mini";
|
|
9296
9315
|
"opengeni-gateway/xai/grok-voice-think-fast-2.0": "opengeni-gateway/xai/grok-voice-think-fast-2.0";
|
|
@@ -9303,6 +9322,7 @@ export type SessionRealtimeModel = z.infer<typeof SessionRealtimeModel>;
|
|
|
9303
9322
|
export declare const WorkspaceRealtimeModelCatalogItem: z.ZodObject<{
|
|
9304
9323
|
id: z.ZodEnum<{
|
|
9305
9324
|
"gpt-live-1-boulder-alpha": "gpt-live-1-boulder-alpha";
|
|
9325
|
+
"opengeni-azure/gpt-live-1": "opengeni-azure/gpt-live-1";
|
|
9306
9326
|
"opengeni-gateway/openai/gpt-realtime-2.1": "opengeni-gateway/openai/gpt-realtime-2.1";
|
|
9307
9327
|
"opengeni-gateway/openai/gpt-realtime-mini": "opengeni-gateway/openai/gpt-realtime-mini";
|
|
9308
9328
|
"opengeni-gateway/xai/grok-voice-think-fast-2.0": "opengeni-gateway/xai/grok-voice-think-fast-2.0";
|
|
@@ -9321,6 +9341,7 @@ export declare const WorkspaceRealtimeModelCatalogItem: z.ZodObject<{
|
|
|
9321
9341
|
description: z.ZodString;
|
|
9322
9342
|
available: z.ZodBoolean;
|
|
9323
9343
|
unavailableReason: z.ZodNullable<z.ZodString>;
|
|
9344
|
+
unavailableCode: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
9324
9345
|
recommended: z.ZodBoolean;
|
|
9325
9346
|
}, z.core.$strip>;
|
|
9326
9347
|
export type WorkspaceRealtimeModelCatalogItem = z.infer<typeof WorkspaceRealtimeModelCatalogItem>;
|
|
@@ -9328,6 +9349,7 @@ export declare const WorkspaceRealtimeModelCatalogResponse: z.ZodObject<{
|
|
|
9328
9349
|
models: z.ZodArray<z.ZodObject<{
|
|
9329
9350
|
id: z.ZodEnum<{
|
|
9330
9351
|
"gpt-live-1-boulder-alpha": "gpt-live-1-boulder-alpha";
|
|
9352
|
+
"opengeni-azure/gpt-live-1": "opengeni-azure/gpt-live-1";
|
|
9331
9353
|
"opengeni-gateway/openai/gpt-realtime-2.1": "opengeni-gateway/openai/gpt-realtime-2.1";
|
|
9332
9354
|
"opengeni-gateway/openai/gpt-realtime-mini": "opengeni-gateway/openai/gpt-realtime-mini";
|
|
9333
9355
|
"opengeni-gateway/xai/grok-voice-think-fast-2.0": "opengeni-gateway/xai/grok-voice-think-fast-2.0";
|
|
@@ -9346,6 +9368,7 @@ export declare const WorkspaceRealtimeModelCatalogResponse: z.ZodObject<{
|
|
|
9346
9368
|
description: z.ZodString;
|
|
9347
9369
|
available: z.ZodBoolean;
|
|
9348
9370
|
unavailableReason: z.ZodNullable<z.ZodString>;
|
|
9371
|
+
unavailableCode: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
9349
9372
|
recommended: z.ZodBoolean;
|
|
9350
9373
|
}, z.core.$strip>>;
|
|
9351
9374
|
}, z.core.$strip>;
|
|
@@ -9369,6 +9392,7 @@ export declare const SessionRealtimeMode: z.ZodObject<{
|
|
|
9369
9392
|
browserInstanceId: z.ZodString;
|
|
9370
9393
|
model: z.ZodEnum<{
|
|
9371
9394
|
"gpt-live-1-boulder-alpha": "gpt-live-1-boulder-alpha";
|
|
9395
|
+
"opengeni-azure/gpt-live-1": "opengeni-azure/gpt-live-1";
|
|
9372
9396
|
"opengeni-gateway/openai/gpt-realtime-2.1": "opengeni-gateway/openai/gpt-realtime-2.1";
|
|
9373
9397
|
"opengeni-gateway/openai/gpt-realtime-mini": "opengeni-gateway/openai/gpt-realtime-mini";
|
|
9374
9398
|
"opengeni-gateway/xai/grok-voice-think-fast-2.0": "opengeni-gateway/xai/grok-voice-think-fast-2.0";
|
|
@@ -9401,6 +9425,7 @@ export declare const BeginSessionRealtimeRequest: z.ZodObject<{
|
|
|
9401
9425
|
operationId: z.ZodString;
|
|
9402
9426
|
model: z.ZodEnum<{
|
|
9403
9427
|
"gpt-live-1-boulder-alpha": "gpt-live-1-boulder-alpha";
|
|
9428
|
+
"opengeni-azure/gpt-live-1": "opengeni-azure/gpt-live-1";
|
|
9404
9429
|
"opengeni-gateway/openai/gpt-realtime-2.1": "opengeni-gateway/openai/gpt-realtime-2.1";
|
|
9405
9430
|
"opengeni-gateway/openai/gpt-realtime-mini": "opengeni-gateway/openai/gpt-realtime-mini";
|
|
9406
9431
|
"opengeni-gateway/xai/grok-voice-think-fast-2.0": "opengeni-gateway/xai/grok-voice-think-fast-2.0";
|
|
@@ -9427,6 +9452,16 @@ export declare const EndSessionRealtimeRequest: z.ZodObject<{
|
|
|
9427
9452
|
}>;
|
|
9428
9453
|
}, z.core.$strip>;
|
|
9429
9454
|
export type EndSessionRealtimeRequest = z.infer<typeof EndSessionRealtimeRequest>;
|
|
9455
|
+
/**
|
|
9456
|
+
* Server instruction to end a live call now. Deployment-funded voice returns
|
|
9457
|
+
* it from a heartbeat when credits run out; the lease is then no longer
|
|
9458
|
+
* extended, so the client should drain and end the call gracefully.
|
|
9459
|
+
*/
|
|
9460
|
+
export declare const SessionRealtimeStopInstruction: z.ZodObject<{
|
|
9461
|
+
code: z.ZodString;
|
|
9462
|
+
message: z.ZodString;
|
|
9463
|
+
}, z.core.$strip>;
|
|
9464
|
+
export type SessionRealtimeStopInstruction = z.infer<typeof SessionRealtimeStopInstruction>;
|
|
9430
9465
|
export declare const SessionRealtimeMutationResponse: z.ZodObject<{
|
|
9431
9466
|
mode: z.ZodObject<{
|
|
9432
9467
|
id: z.ZodString;
|
|
@@ -9435,6 +9470,7 @@ export declare const SessionRealtimeMutationResponse: z.ZodObject<{
|
|
|
9435
9470
|
browserInstanceId: z.ZodString;
|
|
9436
9471
|
model: z.ZodEnum<{
|
|
9437
9472
|
"gpt-live-1-boulder-alpha": "gpt-live-1-boulder-alpha";
|
|
9473
|
+
"opengeni-azure/gpt-live-1": "opengeni-azure/gpt-live-1";
|
|
9438
9474
|
"opengeni-gateway/openai/gpt-realtime-2.1": "opengeni-gateway/openai/gpt-realtime-2.1";
|
|
9439
9475
|
"opengeni-gateway/openai/gpt-realtime-mini": "opengeni-gateway/openai/gpt-realtime-mini";
|
|
9440
9476
|
"opengeni-gateway/xai/grok-voice-think-fast-2.0": "opengeni-gateway/xai/grok-voice-think-fast-2.0";
|
|
@@ -9461,6 +9497,10 @@ export declare const SessionRealtimeMutationResponse: z.ZodObject<{
|
|
|
9461
9497
|
}>>;
|
|
9462
9498
|
}, z.core.$strip>;
|
|
9463
9499
|
replay: z.ZodBoolean;
|
|
9500
|
+
stop: z.ZodOptional<z.ZodObject<{
|
|
9501
|
+
code: z.ZodString;
|
|
9502
|
+
message: z.ZodString;
|
|
9503
|
+
}, z.core.$strip>>;
|
|
9464
9504
|
}, z.core.$strip>;
|
|
9465
9505
|
export type SessionRealtimeMutationResponse = z.infer<typeof SessionRealtimeMutationResponse>;
|
|
9466
9506
|
export declare const SessionAuthorizationOperation: z.ZodEnum<{
|
|
@@ -42443,6 +42483,7 @@ export declare const ClientConfig: z.ZodObject<{
|
|
|
42443
42483
|
voiceInput: z.ZodDefault<z.ZodObject<{
|
|
42444
42484
|
available: z.ZodBoolean;
|
|
42445
42485
|
providers: z.ZodOptional<z.ZodArray<z.ZodEnum<{
|
|
42486
|
+
"azure-mai": "azure-mai";
|
|
42446
42487
|
"azure-openai": "azure-openai";
|
|
42447
42488
|
"codex-subscription": "codex-subscription";
|
|
42448
42489
|
openai: "openai";
|
package/dist/index.js
CHANGED
|
@@ -1484,6 +1484,7 @@ import {
|
|
|
1484
1484
|
SessionRealtimeModel,
|
|
1485
1485
|
SessionRealtimeMutationResponse,
|
|
1486
1486
|
SessionRealtimeState,
|
|
1487
|
+
SessionRealtimeStopInstruction,
|
|
1487
1488
|
SessionRetryRequest,
|
|
1488
1489
|
SessionRetryResponse,
|
|
1489
1490
|
SessionScopeSubjectId,
|
|
@@ -2091,6 +2092,7 @@ import {
|
|
|
2091
2092
|
normalizeWorkspaceLearningSourceKind,
|
|
2092
2093
|
numberTimelineAnnotations,
|
|
2093
2094
|
omitInlineWorkspaceArchiveWhenObjectRefPresent,
|
|
2095
|
+
omitStructuredContentTextDuplicates,
|
|
2094
2096
|
parseSkillFrontmatter,
|
|
2095
2097
|
parseWorkspaceArchiveDescriptor,
|
|
2096
2098
|
parseWorkspaceArchiveObjectKey,
|
|
@@ -2185,7 +2187,7 @@ import {
|
|
|
2185
2187
|
workspaceLearningPolicyRouterContext,
|
|
2186
2188
|
workspaceLearningSourceKey,
|
|
2187
2189
|
workspaceSlackReactionChannelAllowed
|
|
2188
|
-
} from "./chunk-
|
|
2190
|
+
} from "./chunk-YFEAAOBX.js";
|
|
2189
2191
|
import {
|
|
2190
2192
|
EPHEMERAL_CHROMIUM_DRIVER_ID,
|
|
2191
2193
|
browserSessionStorageMode
|
|
@@ -2381,7 +2383,7 @@ import {
|
|
|
2381
2383
|
toolReviewDetails,
|
|
2382
2384
|
toolReviewFieldLabel,
|
|
2383
2385
|
toolReviewFields
|
|
2384
|
-
} from "./chunk-
|
|
2386
|
+
} from "./chunk-TCXCRBPF.js";
|
|
2385
2387
|
import {
|
|
2386
2388
|
AUTOMATIC_SESSION_TITLE_FALLBACK,
|
|
2387
2389
|
AUTOMATIC_SESSION_TITLE_MAX_GRAPHEMES,
|
|
@@ -4316,6 +4318,7 @@ export {
|
|
|
4316
4318
|
SessionRealtimeModel,
|
|
4317
4319
|
SessionRealtimeMutationResponse,
|
|
4318
4320
|
SessionRealtimeState,
|
|
4321
|
+
SessionRealtimeStopInstruction,
|
|
4319
4322
|
SessionRetryRequest,
|
|
4320
4323
|
SessionRetryResponse,
|
|
4321
4324
|
SessionScopeSubjectId,
|
|
@@ -5029,6 +5032,7 @@ export {
|
|
|
5029
5032
|
normalizeWorkspaceLearningSourceKind,
|
|
5030
5033
|
numberTimelineAnnotations,
|
|
5031
5034
|
omitInlineWorkspaceArchiveWhenObjectRefPresent,
|
|
5035
|
+
omitStructuredContentTextDuplicates,
|
|
5032
5036
|
openGeniSlackBotRequestedScopes,
|
|
5033
5037
|
organizationAccessPresetPermissions,
|
|
5034
5038
|
parseConnectorAttachmentTransferEnvelope,
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { AttemptToolResult } from "./tool-catalog.js";
|
|
2
|
+
/**
|
|
3
|
+
* Remove the backwards-compatibility text copy of an MCP result's
|
|
4
|
+
* `structuredContent`.
|
|
5
|
+
*
|
|
6
|
+
* The MCP specification asks a server that returns `structuredContent` to also
|
|
7
|
+
* return the same value serialized in a text content block. Printing or sending
|
|
8
|
+
* both pays for the payload twice, and the text copy pays again for JSON string
|
|
9
|
+
* escaping inside the result envelope.
|
|
10
|
+
*
|
|
11
|
+
* The envelope (`content`, `structuredContent`, `_meta`, `isError`, extension
|
|
12
|
+
* fields) and its key order are kept. Only a plain `{type: "text", text}` block
|
|
13
|
+
* whose text parses as JSON to a value equal to `structuredContent` is removed.
|
|
14
|
+
* Prose, differing JSON, annotated text, images, resources, and every other
|
|
15
|
+
* block stay. A text block whose JSON carries an integer outside the IEEE-754
|
|
16
|
+
* safe range also stays, because its digits may be more precise than the
|
|
17
|
+
* parsed `structuredContent`. Numbers compare by IEEE-754 value.
|
|
18
|
+
*
|
|
19
|
+
* Results without a removable block are returned as the same object.
|
|
20
|
+
*
|
|
21
|
+
* Callers: the runtime's model-facing MCP projection, and the default
|
|
22
|
+
* `ogtool call` print. The native Connected Machine client implements the
|
|
23
|
+
* same rule in `agent/crates/opengeni-agent/src/codemode.rs`; keep them equal.
|
|
24
|
+
*/
|
|
25
|
+
export declare function omitStructuredContentTextDuplicates<T extends AttemptToolResult>(result: T): T;
|
package/dist/personal-github.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
ConnectionMetadata
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-YFEAAOBX.js";
|
|
4
4
|
import "./chunk-4JGHSSB7.js";
|
|
5
5
|
import "./chunk-5IXYF6XN.js";
|
|
6
6
|
import "./chunk-NRMCVHAU.js";
|
|
@@ -15,7 +15,7 @@ import "./chunk-YRKRZ6OF.js";
|
|
|
15
15
|
import "./chunk-2VORLN2R.js";
|
|
16
16
|
import "./chunk-GRG7PHWQ.js";
|
|
17
17
|
import "./chunk-YRXAWWCU.js";
|
|
18
|
-
import "./chunk-
|
|
18
|
+
import "./chunk-TCXCRBPF.js";
|
|
19
19
|
import "./chunk-2ACYHZFB.js";
|
|
20
20
|
import "./chunk-KHHZTBP7.js";
|
|
21
21
|
import "./chunk-YBW5JSA3.js";
|
|
@@ -35,6 +35,7 @@ export type ToolReviewContext = z.infer<typeof ToolReviewContext>;
|
|
|
35
35
|
export declare function toolReviewContextFromSchema(inputSchema: unknown, hints: Omit<ToolReviewContext, "fieldLabels" | "protectedFields">): ToolReviewContext;
|
|
36
36
|
export declare const ToolReviewStatus: z.ZodEnum<{
|
|
37
37
|
approved: "approved";
|
|
38
|
+
blocked: "blocked";
|
|
38
39
|
cancelled: "cancelled";
|
|
39
40
|
completed: "completed";
|
|
40
41
|
executing: "executing";
|
|
@@ -64,6 +65,7 @@ export declare const ToolActionReview: z.ZodObject<{
|
|
|
64
65
|
revision: z.ZodString;
|
|
65
66
|
status: z.ZodEnum<{
|
|
66
67
|
approved: "approved";
|
|
68
|
+
blocked: "blocked";
|
|
67
69
|
cancelled: "cancelled";
|
|
68
70
|
completed: "completed";
|
|
69
71
|
executing: "executing";
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
export declare const TranscriptionRecordingErrorCode: z.ZodEnum<{
|
|
3
|
+
allowance_exhausted: "allowance_exhausted";
|
|
3
4
|
cancelled: "cancelled";
|
|
5
|
+
insufficient_credits: "insufficient_credits";
|
|
4
6
|
invalid_audio: "invalid_audio";
|
|
7
|
+
monthly_model_cost_limit: "monthly_model_cost_limit";
|
|
5
8
|
network: "network";
|
|
6
9
|
not_supported: "not_supported";
|
|
7
10
|
permission_denied: "permission_denied";
|
|
@@ -71,8 +74,11 @@ export declare const TranscriptionRecordingSegment: z.ZodObject<{
|
|
|
71
74
|
durationMilliseconds: z.ZodNumber;
|
|
72
75
|
byteLength: z.ZodNumber;
|
|
73
76
|
errorCode: z.ZodNullable<z.ZodEnum<{
|
|
77
|
+
allowance_exhausted: "allowance_exhausted";
|
|
74
78
|
cancelled: "cancelled";
|
|
79
|
+
insufficient_credits: "insufficient_credits";
|
|
75
80
|
invalid_audio: "invalid_audio";
|
|
81
|
+
monthly_model_cost_limit: "monthly_model_cost_limit";
|
|
76
82
|
network: "network";
|
|
77
83
|
not_supported: "not_supported";
|
|
78
84
|
permission_denied: "permission_denied";
|
|
@@ -108,8 +114,11 @@ export declare const TranscriptionRecording: z.ZodObject<{
|
|
|
108
114
|
transcriptText: z.ZodNullable<z.ZodString>;
|
|
109
115
|
languages: z.ZodArray<z.ZodString>;
|
|
110
116
|
errorCode: z.ZodNullable<z.ZodEnum<{
|
|
117
|
+
allowance_exhausted: "allowance_exhausted";
|
|
111
118
|
cancelled: "cancelled";
|
|
119
|
+
insufficient_credits: "insufficient_credits";
|
|
112
120
|
invalid_audio: "invalid_audio";
|
|
121
|
+
monthly_model_cost_limit: "monthly_model_cost_limit";
|
|
113
122
|
network: "network";
|
|
114
123
|
not_supported: "not_supported";
|
|
115
124
|
permission_denied: "permission_denied";
|
|
@@ -150,8 +159,11 @@ export declare const TranscriptionRecordingResponse: z.ZodObject<{
|
|
|
150
159
|
transcriptText: z.ZodNullable<z.ZodString>;
|
|
151
160
|
languages: z.ZodArray<z.ZodString>;
|
|
152
161
|
errorCode: z.ZodNullable<z.ZodEnum<{
|
|
162
|
+
allowance_exhausted: "allowance_exhausted";
|
|
153
163
|
cancelled: "cancelled";
|
|
164
|
+
insufficient_credits: "insufficient_credits";
|
|
154
165
|
invalid_audio: "invalid_audio";
|
|
166
|
+
monthly_model_cost_limit: "monthly_model_cost_limit";
|
|
155
167
|
network: "network";
|
|
156
168
|
not_supported: "not_supported";
|
|
157
169
|
permission_denied: "permission_denied";
|
|
@@ -181,8 +193,11 @@ export declare const TranscriptionRecordingResponse: z.ZodObject<{
|
|
|
181
193
|
durationMilliseconds: z.ZodNumber;
|
|
182
194
|
byteLength: z.ZodNumber;
|
|
183
195
|
errorCode: z.ZodNullable<z.ZodEnum<{
|
|
196
|
+
allowance_exhausted: "allowance_exhausted";
|
|
184
197
|
cancelled: "cancelled";
|
|
198
|
+
insufficient_credits: "insufficient_credits";
|
|
185
199
|
invalid_audio: "invalid_audio";
|
|
200
|
+
monthly_model_cost_limit: "monthly_model_cost_limit";
|
|
186
201
|
network: "network";
|
|
187
202
|
not_supported: "not_supported";
|
|
188
203
|
permission_denied: "permission_denied";
|
|
@@ -221,8 +236,11 @@ export declare const TranscriptionRecordingListResponse: z.ZodObject<{
|
|
|
221
236
|
transcriptText: z.ZodNullable<z.ZodString>;
|
|
222
237
|
languages: z.ZodArray<z.ZodString>;
|
|
223
238
|
errorCode: z.ZodNullable<z.ZodEnum<{
|
|
239
|
+
allowance_exhausted: "allowance_exhausted";
|
|
224
240
|
cancelled: "cancelled";
|
|
241
|
+
insufficient_credits: "insufficient_credits";
|
|
225
242
|
invalid_audio: "invalid_audio";
|
|
243
|
+
monthly_model_cost_limit: "monthly_model_cost_limit";
|
|
226
244
|
network: "network";
|
|
227
245
|
not_supported: "not_supported";
|
|
228
246
|
permission_denied: "permission_denied";
|
|
@@ -264,8 +282,11 @@ export declare const UploadTranscriptionRecordingChunkResponse: z.ZodObject<{
|
|
|
264
282
|
transcriptText: z.ZodNullable<z.ZodString>;
|
|
265
283
|
languages: z.ZodArray<z.ZodString>;
|
|
266
284
|
errorCode: z.ZodNullable<z.ZodEnum<{
|
|
285
|
+
allowance_exhausted: "allowance_exhausted";
|
|
267
286
|
cancelled: "cancelled";
|
|
287
|
+
insufficient_credits: "insufficient_credits";
|
|
268
288
|
invalid_audio: "invalid_audio";
|
|
289
|
+
monthly_model_cost_limit: "monthly_model_cost_limit";
|
|
269
290
|
network: "network";
|
|
270
291
|
not_supported: "not_supported";
|
|
271
292
|
permission_denied: "permission_denied";
|
package/package.json
CHANGED
package/src/agent-config.ts
CHANGED
|
@@ -423,8 +423,11 @@ export type AgentFunctionToolClass = AgentCapabilityId | "runtime" | "sandbox";
|
|
|
423
423
|
|
|
424
424
|
/** Tools served outside the first-party MCP catalog, by the name the model sees. */
|
|
425
425
|
export const AGENT_FUNCTION_TOOL_CAPABILITIES = {
|
|
426
|
-
//
|
|
426
|
+
// Web search: the provider-hosted `web_search`/`x_search` tools, or
|
|
427
|
+
// Opengeni's provider-agnostic `web_search` and `web_fetch` function tools
|
|
428
|
+
// (one transport per turn; the capability is the same).
|
|
427
429
|
web_search: "webSearch",
|
|
430
|
+
web_fetch: "webSearch",
|
|
428
431
|
x_search: "webSearch",
|
|
429
432
|
image_generation: "media",
|
|
430
433
|
// Runtime function tools.
|
package/src/index.ts
CHANGED
|
@@ -115,6 +115,7 @@ export * from "./editable-artifact-serialized-commit";
|
|
|
115
115
|
export * from "./signup-attribution";
|
|
116
116
|
export * from "./product-lifecycle-facts";
|
|
117
117
|
export * from "./tool-catalog";
|
|
118
|
+
export * from "./mcp-structured-content";
|
|
118
119
|
export * from "./mcp-oauth";
|
|
119
120
|
export * from "./tool-result-spill";
|
|
120
121
|
export * from "./interaction";
|
|
@@ -1864,6 +1865,9 @@ export const TranscriptionErrorCode = z.enum([
|
|
|
1864
1865
|
"too_large",
|
|
1865
1866
|
"invalid_audio",
|
|
1866
1867
|
"unknown",
|
|
1868
|
+
"insufficient_credits",
|
|
1869
|
+
"allowance_exhausted",
|
|
1870
|
+
"monthly_model_cost_limit",
|
|
1867
1871
|
]);
|
|
1868
1872
|
export type TranscriptionErrorCode = z.infer<typeof TranscriptionErrorCode>;
|
|
1869
1873
|
|
|
@@ -2120,6 +2124,7 @@ export const VoiceInputProviderId = z.enum([
|
|
|
2120
2124
|
"codex-subscription",
|
|
2121
2125
|
"openai",
|
|
2122
2126
|
"azure-openai",
|
|
2127
|
+
"azure-mai",
|
|
2123
2128
|
]);
|
|
2124
2129
|
export type VoiceInputProviderId = z.infer<typeof VoiceInputProviderId>;
|
|
2125
2130
|
|
|
@@ -7072,7 +7077,7 @@ export const CodexRealtimeWebrtcResponse = z
|
|
|
7072
7077
|
.min(1)
|
|
7073
7078
|
.max(1024 * 1024),
|
|
7074
7079
|
version: CodexRealtimeWebrtcVersion,
|
|
7075
|
-
model: z.
|
|
7080
|
+
model: z.enum(["gpt-live-1-boulder-alpha", "opengeni-azure/gpt-live-1"]),
|
|
7076
7081
|
connectionId: z.string().uuid(),
|
|
7077
7082
|
connectionEpoch: z.number().int().positive(),
|
|
7078
7083
|
startupFenceSequence: z.number().int().nonnegative(),
|
|
@@ -7229,6 +7234,7 @@ export const SyncSessionRealtimeLedgerResponse = z
|
|
|
7229
7234
|
export type SyncSessionRealtimeLedgerResponse = z.infer<typeof SyncSessionRealtimeLedgerResponse>;
|
|
7230
7235
|
|
|
7231
7236
|
export const SessionRealtimeModel = z.enum([
|
|
7237
|
+
"opengeni-azure/gpt-live-1",
|
|
7232
7238
|
"gpt-live-1-boulder-alpha",
|
|
7233
7239
|
"supergrok/grok-voice-think-fast-2.0",
|
|
7234
7240
|
"opengeni-gateway/openai/gpt-realtime-2.1",
|
|
@@ -7247,6 +7253,12 @@ export const WorkspaceRealtimeModelCatalogItem = z.object({
|
|
|
7247
7253
|
description: z.string().min(1),
|
|
7248
7254
|
available: z.boolean(),
|
|
7249
7255
|
unavailableReason: z.string().nullable(),
|
|
7256
|
+
/**
|
|
7257
|
+
* Machine-readable reason when unavailable. Credit refusals use the same
|
|
7258
|
+
* codes as voice input (`insufficient_credits`, `allowance_exhausted`,
|
|
7259
|
+
* `monthly_model_cost_limit`).
|
|
7260
|
+
*/
|
|
7261
|
+
unavailableCode: z.string().min(1).max(64).nullable().optional(),
|
|
7250
7262
|
recommended: z.boolean(),
|
|
7251
7263
|
});
|
|
7252
7264
|
export type WorkspaceRealtimeModelCatalogItem = z.infer<typeof WorkspaceRealtimeModelCatalogItem>;
|
|
@@ -7302,9 +7314,21 @@ export const EndSessionRealtimeRequest = RenewSessionRealtimeRequest.extend({
|
|
|
7302
7314
|
});
|
|
7303
7315
|
export type EndSessionRealtimeRequest = z.infer<typeof EndSessionRealtimeRequest>;
|
|
7304
7316
|
|
|
7317
|
+
/**
|
|
7318
|
+
* Server instruction to end a live call now. Deployment-funded voice returns
|
|
7319
|
+
* it from a heartbeat when credits run out; the lease is then no longer
|
|
7320
|
+
* extended, so the client should drain and end the call gracefully.
|
|
7321
|
+
*/
|
|
7322
|
+
export const SessionRealtimeStopInstruction = z.object({
|
|
7323
|
+
code: z.string().min(1).max(64),
|
|
7324
|
+
message: z.string().min(1).max(512),
|
|
7325
|
+
});
|
|
7326
|
+
export type SessionRealtimeStopInstruction = z.infer<typeof SessionRealtimeStopInstruction>;
|
|
7327
|
+
|
|
7305
7328
|
export const SessionRealtimeMutationResponse = z.object({
|
|
7306
7329
|
mode: SessionRealtimeMode,
|
|
7307
7330
|
replay: z.boolean(),
|
|
7331
|
+
stop: SessionRealtimeStopInstruction.optional(),
|
|
7308
7332
|
});
|
|
7309
7333
|
export type SessionRealtimeMutationResponse = z.infer<typeof SessionRealtimeMutationResponse>;
|
|
7310
7334
|
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import type { AttemptToolResult } from "./tool-catalog";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Remove the backwards-compatibility text copy of an MCP result's
|
|
5
|
+
* `structuredContent`.
|
|
6
|
+
*
|
|
7
|
+
* The MCP specification asks a server that returns `structuredContent` to also
|
|
8
|
+
* return the same value serialized in a text content block. Printing or sending
|
|
9
|
+
* both pays for the payload twice, and the text copy pays again for JSON string
|
|
10
|
+
* escaping inside the result envelope.
|
|
11
|
+
*
|
|
12
|
+
* The envelope (`content`, `structuredContent`, `_meta`, `isError`, extension
|
|
13
|
+
* fields) and its key order are kept. Only a plain `{type: "text", text}` block
|
|
14
|
+
* whose text parses as JSON to a value equal to `structuredContent` is removed.
|
|
15
|
+
* Prose, differing JSON, annotated text, images, resources, and every other
|
|
16
|
+
* block stay. A text block whose JSON carries an integer outside the IEEE-754
|
|
17
|
+
* safe range also stays, because its digits may be more precise than the
|
|
18
|
+
* parsed `structuredContent`. Numbers compare by IEEE-754 value.
|
|
19
|
+
*
|
|
20
|
+
* Results without a removable block are returned as the same object.
|
|
21
|
+
*
|
|
22
|
+
* Callers: the runtime's model-facing MCP projection, and the default
|
|
23
|
+
* `ogtool call` print. The native Connected Machine client implements the
|
|
24
|
+
* same rule in `agent/crates/opengeni-agent/src/codemode.rs`; keep them equal.
|
|
25
|
+
*/
|
|
26
|
+
export function omitStructuredContentTextDuplicates<T extends AttemptToolResult>(result: T): T {
|
|
27
|
+
const structured: unknown = result.structuredContent;
|
|
28
|
+
if (structured === undefined || structured === null) return result;
|
|
29
|
+
const content = result.content.filter(
|
|
30
|
+
(entry) => !isPlainTextBlock(entry) || !textDuplicatesStructuredContent(entry.text, structured),
|
|
31
|
+
);
|
|
32
|
+
if (content.length === result.content.length) return result;
|
|
33
|
+
return { ...result, content };
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function isPlainTextBlock(entry: unknown): entry is { type: "text"; text: string } {
|
|
37
|
+
if (!entry || typeof entry !== "object" || Array.isArray(entry)) return false;
|
|
38
|
+
const record = entry as Record<string, unknown>;
|
|
39
|
+
if (record.type !== "text" || typeof record.text !== "string") return false;
|
|
40
|
+
// Annotations or _meta are block-level facts the structured value lacks.
|
|
41
|
+
return Object.keys(record).every((key) => key === "type" || key === "text");
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function textDuplicatesStructuredContent(text: string, structured: unknown): boolean {
|
|
45
|
+
const trimmed = text.replace(/^[ \t\n\r]+/u, "");
|
|
46
|
+
if (!trimmed.startsWith("{") && !trimmed.startsWith("[")) return false;
|
|
47
|
+
let parsed: unknown;
|
|
48
|
+
try {
|
|
49
|
+
parsed = JSON.parse(text);
|
|
50
|
+
} catch {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
return !containsUnsafeInteger(parsed) && jsonValuesEqual(parsed, structured);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function containsUnsafeInteger(value: unknown): boolean {
|
|
57
|
+
if (typeof value === "number") return Number.isInteger(value) && !Number.isSafeInteger(value);
|
|
58
|
+
if (Array.isArray(value)) return value.some(containsUnsafeInteger);
|
|
59
|
+
if (value && typeof value === "object") return Object.values(value).some(containsUnsafeInteger);
|
|
60
|
+
return false;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
function jsonValuesEqual(left: unknown, right: unknown): boolean {
|
|
64
|
+
if (left === right) return true;
|
|
65
|
+
if (typeof left !== "object" || typeof right !== "object" || left === null || right === null) {
|
|
66
|
+
return false;
|
|
67
|
+
}
|
|
68
|
+
if (Array.isArray(left) || Array.isArray(right)) {
|
|
69
|
+
if (!Array.isArray(left) || !Array.isArray(right) || left.length !== right.length) {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
return left.every((entry, index) => jsonValuesEqual(entry, right[index]));
|
|
73
|
+
}
|
|
74
|
+
const leftRecord = left as Record<string, unknown>;
|
|
75
|
+
const rightRecord = right as Record<string, unknown>;
|
|
76
|
+
const leftKeys = Object.keys(leftRecord);
|
|
77
|
+
if (leftKeys.length !== Object.keys(rightRecord).length) return false;
|
|
78
|
+
return leftKeys.every(
|
|
79
|
+
(key) => Object.hasOwn(rightRecord, key) && jsonValuesEqual(leftRecord[key], rightRecord[key]),
|
|
80
|
+
);
|
|
81
|
+
}
|