@f5-sales-demo/xcsh 19.61.2 → 19.61.3
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/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@f5-sales-demo/xcsh",
|
|
4
|
-
"version": "19.61.
|
|
4
|
+
"version": "19.61.3",
|
|
5
5
|
"description": "Coding agent CLI with read, bash, edit, write tools and session management",
|
|
6
6
|
"homepage": "https://github.com/f5-sales-demo/xcsh",
|
|
7
7
|
"author": "Can Boluk",
|
|
@@ -56,13 +56,13 @@
|
|
|
56
56
|
"dependencies": {
|
|
57
57
|
"@agentclientprotocol/sdk": "0.16.1",
|
|
58
58
|
"@mozilla/readability": "^0.6",
|
|
59
|
-
"@f5-sales-demo/xcsh-stats": "19.61.
|
|
60
|
-
"@f5-sales-demo/pi-agent-core": "19.61.
|
|
61
|
-
"@f5-sales-demo/pi-ai": "19.61.
|
|
62
|
-
"@f5-sales-demo/pi-natives": "19.61.
|
|
63
|
-
"@f5-sales-demo/pi-resource-management": "19.61.
|
|
64
|
-
"@f5-sales-demo/pi-tui": "19.61.
|
|
65
|
-
"@f5-sales-demo/pi-utils": "19.61.
|
|
59
|
+
"@f5-sales-demo/xcsh-stats": "19.61.3",
|
|
60
|
+
"@f5-sales-demo/pi-agent-core": "19.61.3",
|
|
61
|
+
"@f5-sales-demo/pi-ai": "19.61.3",
|
|
62
|
+
"@f5-sales-demo/pi-natives": "19.61.3",
|
|
63
|
+
"@f5-sales-demo/pi-resource-management": "19.61.3",
|
|
64
|
+
"@f5-sales-demo/pi-tui": "19.61.3",
|
|
65
|
+
"@f5-sales-demo/pi-utils": "19.61.3",
|
|
66
66
|
"@sinclair/typebox": "^0.34",
|
|
67
67
|
"@xterm/headless": "^6.0",
|
|
68
68
|
"ajv": "^8.20",
|
package/src/commands/worker.ts
CHANGED
|
@@ -233,6 +233,23 @@ export default class Worker extends Command {
|
|
|
233
233
|
...(process.env.XCSH_BENCH_EXTENSION ? { additionalExtensionPaths: [process.env.XCSH_BENCH_EXTENSION] } : {}),
|
|
234
234
|
});
|
|
235
235
|
|
|
236
|
+
// TTFT Phase 3 hermeticity: the bench-instant stand-in provider is registered while
|
|
237
|
+
// createAgentSession loads the bench extension (additionalExtensionPaths), which is
|
|
238
|
+
// AFTER the default-model role is resolved — so the worker would otherwise fall back
|
|
239
|
+
// to a real provider and the benchmark would measure live network TTFT, not xcsh
|
|
240
|
+
// overhead. In bench mode, explicitly select bench-instant now that it is registered.
|
|
241
|
+
// Gated on XCSH_BENCH_EXTENSION → completely inert for a normal `xcsh worker`.
|
|
242
|
+
if (process.env.XCSH_BENCH_EXTENSION) {
|
|
243
|
+
const benchModel = session.modelRegistry.find("bench-instant", "bench-instant");
|
|
244
|
+
if (benchModel) {
|
|
245
|
+
await session.setModel(benchModel);
|
|
246
|
+
} else {
|
|
247
|
+
console.error(
|
|
248
|
+
"[xcsh worker] BENCH ERROR: bench-instant model not registered — benchmark would measure a real provider",
|
|
249
|
+
);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
|
|
236
253
|
const chatHandler = new ChatHandler(bridge, session);
|
|
237
254
|
chatHandler.attach();
|
|
238
255
|
|
|
@@ -17,17 +17,17 @@ export interface BuildInfo {
|
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
export const BUILD_INFO: BuildInfo = {
|
|
20
|
-
"version": "19.61.
|
|
21
|
-
"commit": "
|
|
22
|
-
"shortCommit": "
|
|
20
|
+
"version": "19.61.3",
|
|
21
|
+
"commit": "1546a875f07608812967e1169ea86c2bd3f837ac",
|
|
22
|
+
"shortCommit": "1546a87",
|
|
23
23
|
"branch": "main",
|
|
24
|
-
"tag": "v19.61.
|
|
25
|
-
"commitDate": "2026-07-
|
|
26
|
-
"buildDate": "2026-07-
|
|
24
|
+
"tag": "v19.61.3",
|
|
25
|
+
"commitDate": "2026-07-07T11:57:08Z",
|
|
26
|
+
"buildDate": "2026-07-07T12:21:42.145Z",
|
|
27
27
|
"dirty": true,
|
|
28
28
|
"prNumber": "",
|
|
29
29
|
"repoUrl": "https://github.com/f5-sales-demo/xcsh",
|
|
30
30
|
"repoSlug": "f5-sales-demo/xcsh",
|
|
31
|
-
"commitUrl": "https://github.com/f5-sales-demo/xcsh/commit/
|
|
32
|
-
"releaseUrl": "https://github.com/f5-sales-demo/xcsh/releases/tag/v19.61.
|
|
31
|
+
"commitUrl": "https://github.com/f5-sales-demo/xcsh/commit/1546a875f07608812967e1169ea86c2bd3f837ac",
|
|
32
|
+
"releaseUrl": "https://github.com/f5-sales-demo/xcsh/releases/tag/v19.61.3"
|
|
33
33
|
};
|
|
@@ -269,9 +269,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
269
269
|
category: "load-balancing",
|
|
270
270
|
description:
|
|
271
271
|
"Advertise_policy object controls how and where a service represented by a given virtual_host object is advertised to consumers. configuration",
|
|
272
|
-
required: ["name", "
|
|
272
|
+
required: ["name", "address", "protocol", "skip_xff_append"],
|
|
273
273
|
minimal_config:
|
|
274
|
-
'resource "xcsh_advertise_policy" "example" {\n name = "example-advertise-policy"\n namespace = "
|
|
274
|
+
'resource "xcsh_advertise_policy" "example" {\n name = "example-advertise-policy"\n namespace = "system"\n\n address = "example-value"\n protocol = "example-value"\n skip_xff_append = true\n}',
|
|
275
275
|
dependencies: {
|
|
276
276
|
requires: [],
|
|
277
277
|
},
|
|
@@ -293,7 +293,7 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
293
293
|
description: "New Alert Receiver object",
|
|
294
294
|
required: ["name", "namespace", "receiver_choice"],
|
|
295
295
|
minimal_config:
|
|
296
|
-
'resource "xcsh_alert_receiver" "example" {\n name = "example-alert-receiver"\n namespace = "
|
|
296
|
+
'resource "xcsh_alert_receiver" "example" {\n name = "example-alert-receiver"\n namespace = "system"\n}',
|
|
297
297
|
dependencies: {
|
|
298
298
|
requires: [],
|
|
299
299
|
},
|
|
@@ -302,9 +302,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
302
302
|
api_crawler: {
|
|
303
303
|
category: "api-security",
|
|
304
304
|
description: "API Crawler resource",
|
|
305
|
-
required: ["name"
|
|
305
|
+
required: ["name"],
|
|
306
306
|
minimal_config:
|
|
307
|
-
'resource "xcsh_api_crawler" "example" {\n name = "example-api-crawler"\n namespace = "
|
|
307
|
+
'resource "xcsh_api_crawler" "example" {\n name = "example-api-crawler"\n namespace = "system"\n}',
|
|
308
308
|
dependencies: {
|
|
309
309
|
requires: [],
|
|
310
310
|
},
|
|
@@ -315,7 +315,7 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
315
315
|
description: "API Definition",
|
|
316
316
|
required: ["name", "namespace"],
|
|
317
317
|
minimal_config:
|
|
318
|
-
'resource "xcsh_api_definition" "example" {\n name = "example-api-definition"\n namespace = "
|
|
318
|
+
'resource "xcsh_api_definition" "example" {\n name = "example-api-definition"\n namespace = "system"\n}',
|
|
319
319
|
dependencies: {
|
|
320
320
|
requires: ["namespace"],
|
|
321
321
|
},
|
|
@@ -326,7 +326,7 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
326
326
|
description: "API discovery creates a new object in the storage backend for metadata.namespace",
|
|
327
327
|
required: ["name", "namespace", "user_defined_api_discovery_policy"],
|
|
328
328
|
minimal_config:
|
|
329
|
-
'resource "xcsh_api_discovery" "example" {\n name = "example-api-discovery"\n namespace = "
|
|
329
|
+
'resource "xcsh_api_discovery" "example" {\n name = "example-api-discovery"\n namespace = "system"\n}',
|
|
330
330
|
dependencies: {
|
|
331
331
|
requires: [],
|
|
332
332
|
},
|
|
@@ -335,9 +335,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
335
335
|
api_testing: {
|
|
336
336
|
category: "api-security",
|
|
337
337
|
description: "API Testing resource",
|
|
338
|
-
required: ["name", "
|
|
338
|
+
required: ["name", "custom_header_value"],
|
|
339
339
|
minimal_config:
|
|
340
|
-
'resource "xcsh_api_testing" "example" {\n name = "example-api-testing"\n namespace = "
|
|
340
|
+
'resource "xcsh_api_testing" "example" {\n name = "example-api-testing"\n namespace = "system"\n\n custom_header_value = "example-value"\n}',
|
|
341
341
|
dependencies: {
|
|
342
342
|
requires: [],
|
|
343
343
|
},
|
|
@@ -356,9 +356,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
356
356
|
app_api_group: {
|
|
357
357
|
category: "api-security",
|
|
358
358
|
description: "App_api_group creates a new object in the storage backend for metadata.namespace",
|
|
359
|
-
required: ["name"
|
|
359
|
+
required: ["name"],
|
|
360
360
|
minimal_config:
|
|
361
|
-
'resource "xcsh_app_api_group" "example" {\n name = "example-app-api-group"\n namespace = "
|
|
361
|
+
'resource "xcsh_app_api_group" "example" {\n name = "example-app-api-group"\n namespace = "system"\n}',
|
|
362
362
|
dependencies: {
|
|
363
363
|
requires: [],
|
|
364
364
|
},
|
|
@@ -378,9 +378,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
378
378
|
app_setting: {
|
|
379
379
|
category: "applications",
|
|
380
380
|
description: "App setting configuration in namespace metadata.namespace",
|
|
381
|
-
required: ["name"
|
|
381
|
+
required: ["name"],
|
|
382
382
|
minimal_config:
|
|
383
|
-
'resource "xcsh_app_setting" "example" {\n name = "example-app-setting"\n namespace = "
|
|
383
|
+
'resource "xcsh_app_setting" "example" {\n name = "example-app-setting"\n namespace = "system"\n}',
|
|
384
384
|
dependencies: {
|
|
385
385
|
requires: [],
|
|
386
386
|
},
|
|
@@ -389,9 +389,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
389
389
|
app_type: {
|
|
390
390
|
category: "applications",
|
|
391
391
|
description: "App type will create the configuration in namespace metadata.namespace",
|
|
392
|
-
required: ["name"
|
|
392
|
+
required: ["name"],
|
|
393
393
|
minimal_config:
|
|
394
|
-
'resource "xcsh_app_type" "example" {\n name = "example-app-type"\n namespace = "
|
|
394
|
+
'resource "xcsh_app_type" "example" {\n name = "example-app-type"\n namespace = "system"\n}',
|
|
395
395
|
dependencies: {
|
|
396
396
|
requires: [],
|
|
397
397
|
},
|
|
@@ -433,9 +433,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
433
433
|
aws_tgw_site: {
|
|
434
434
|
category: "sites",
|
|
435
435
|
description: "Deploying F5 sites connected via AWS Transit Gateway",
|
|
436
|
-
required: ["name"
|
|
436
|
+
required: ["name"],
|
|
437
437
|
minimal_config:
|
|
438
|
-
'resource "xcsh_aws_tgw_site" "example" {\n name = "example-aws-tgw-site"\n namespace = "
|
|
438
|
+
'resource "xcsh_aws_tgw_site" "example" {\n name = "example-aws-tgw-site"\n namespace = "system"\n}',
|
|
439
439
|
dependencies: {
|
|
440
440
|
requires: [],
|
|
441
441
|
},
|
|
@@ -444,9 +444,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
444
444
|
aws_vpc_site: {
|
|
445
445
|
category: "sites",
|
|
446
446
|
description: "Deploying F5 sites within AWS VPC environments",
|
|
447
|
-
required: ["name", "
|
|
447
|
+
required: ["name", "address", "aws_region", "disk_size", "instance_type", "ssh_key"],
|
|
448
448
|
minimal_config:
|
|
449
|
-
'resource "xcsh_aws_vpc_site" "example" {\n name = "example-aws-vpc-site"\n namespace = "
|
|
449
|
+
'resource "xcsh_aws_vpc_site" "example" {\n name = "example-aws-vpc-site"\n namespace = "system"\n\n aws_region = "example-value"\n instance_type = "example-value"\n ssh_key = "example-value"\n address = "example-value"\n disk_size = 1\n}',
|
|
450
450
|
dependencies: {
|
|
451
451
|
requires: [],
|
|
452
452
|
},
|
|
@@ -455,9 +455,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
455
455
|
azure_vnet_site: {
|
|
456
456
|
category: "sites",
|
|
457
457
|
description: "Deploying F5 sites within Azure Virtual Network environments",
|
|
458
|
-
required: ["name", "
|
|
458
|
+
required: ["name", "machine_type", "resource_group", "ssh_key"],
|
|
459
459
|
minimal_config:
|
|
460
|
-
'resource "xcsh_azure_vnet_site" "example" {\n name = "example-Azure-vnet-site"\n namespace = "
|
|
460
|
+
'resource "xcsh_azure_vnet_site" "example" {\n name = "example-Azure-vnet-site"\n namespace = "system"\n\n machine_type = "example-value"\n resource_group = "example-value"\n ssh_key = "example-value"\n}',
|
|
461
461
|
dependencies: {
|
|
462
462
|
requires: [],
|
|
463
463
|
},
|
|
@@ -467,8 +467,8 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
467
467
|
category: "networking",
|
|
468
468
|
description:
|
|
469
469
|
"Bgp object is the configuration for peering with external bgp servers. it is created by users in system namespace. configuration",
|
|
470
|
-
required: ["name"
|
|
471
|
-
minimal_config: 'resource "xcsh_bgp" "example" {\n name = "example-bgp"\n namespace = "
|
|
470
|
+
required: ["name"],
|
|
471
|
+
minimal_config: 'resource "xcsh_bgp" "example" {\n name = "example-bgp"\n namespace = "system"\n}',
|
|
472
472
|
dependencies: {
|
|
473
473
|
requires: [],
|
|
474
474
|
},
|
|
@@ -477,9 +477,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
477
477
|
bgp_asn_set: {
|
|
478
478
|
category: "networking",
|
|
479
479
|
description: "Bgp_asn_set creates a new object in the storage backend for metadata.namespace",
|
|
480
|
-
required: ["name"
|
|
480
|
+
required: ["name"],
|
|
481
481
|
minimal_config:
|
|
482
|
-
'resource "xcsh_bgp_asn_set" "example" {\n name = "example-bgp-asn-set"\n namespace = "
|
|
482
|
+
'resource "xcsh_bgp_asn_set" "example" {\n name = "example-bgp-asn-set"\n namespace = "system"\n\n as_numbers = [1]\n}',
|
|
483
483
|
dependencies: {
|
|
484
484
|
requires: [],
|
|
485
485
|
},
|
|
@@ -588,9 +588,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
588
588
|
cloud_credentials: {
|
|
589
589
|
category: "authentication",
|
|
590
590
|
description: "Api to create cloud_credentials object. configuration",
|
|
591
|
-
required: ["name"
|
|
591
|
+
required: ["name"],
|
|
592
592
|
minimal_config:
|
|
593
|
-
'resource "xcsh_cloud_credentials" "example" {\n name = "example-cloud-credentials"\n namespace = "
|
|
593
|
+
'resource "xcsh_cloud_credentials" "example" {\n name = "example-cloud-credentials"\n namespace = "system"\n}',
|
|
594
594
|
dependencies: {
|
|
595
595
|
requires: [],
|
|
596
596
|
},
|
|
@@ -599,9 +599,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
599
599
|
cloud_elastic_ip: {
|
|
600
600
|
category: "cloud-resources",
|
|
601
601
|
description: "Cloud Elastic IP creates Cloud Elastic IP object Object is attached to a site",
|
|
602
|
-
required: ["name", "
|
|
602
|
+
required: ["name", "item_count"],
|
|
603
603
|
minimal_config:
|
|
604
|
-
'resource "xcsh_cloud_elastic_ip" "example" {\n name = "example-cloud-elastic-ip"\n namespace = "
|
|
604
|
+
'resource "xcsh_cloud_elastic_ip" "example" {\n name = "example-cloud-elastic-ip"\n namespace = "system"\n\n item_count = 1\n}',
|
|
605
605
|
dependencies: {
|
|
606
606
|
requires: [],
|
|
607
607
|
},
|
|
@@ -651,9 +651,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
651
651
|
code_base_integration: {
|
|
652
652
|
category: "integrations",
|
|
653
653
|
description: "Integration details",
|
|
654
|
-
required: ["name"
|
|
654
|
+
required: ["name"],
|
|
655
655
|
minimal_config:
|
|
656
|
-
'resource "xcsh_code_base_integration" "example" {\n name = "example-code-base-integration"\n namespace = "
|
|
656
|
+
'resource "xcsh_code_base_integration" "example" {\n name = "example-code-base-integration"\n namespace = "system"\n}',
|
|
657
657
|
dependencies: {
|
|
658
658
|
requires: [],
|
|
659
659
|
},
|
|
@@ -706,9 +706,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
706
706
|
dc_cluster_group: {
|
|
707
707
|
category: "networking",
|
|
708
708
|
description: "DC Cluster group in given namespace",
|
|
709
|
-
required: ["name"
|
|
709
|
+
required: ["name"],
|
|
710
710
|
minimal_config:
|
|
711
|
-
'resource "xcsh_dc_cluster_group" "example" {\n name = "example-dc-cluster-group"\n namespace = "
|
|
711
|
+
'resource "xcsh_dc_cluster_group" "example" {\n name = "example-dc-cluster-group"\n namespace = "system"\n}',
|
|
712
712
|
dependencies: {
|
|
713
713
|
requires: [],
|
|
714
714
|
},
|
|
@@ -717,9 +717,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
717
717
|
discovery: {
|
|
718
718
|
category: "applications",
|
|
719
719
|
description: "Api to create discovery object for a site or virtual site in system namespace. configuration",
|
|
720
|
-
required: ["name"
|
|
720
|
+
required: ["name"],
|
|
721
721
|
minimal_config:
|
|
722
|
-
'resource "xcsh_discovery" "example" {\n name = "example-discovery"\n namespace = "
|
|
722
|
+
'resource "xcsh_discovery" "example" {\n name = "example-discovery"\n namespace = "system"\n}',
|
|
723
723
|
dependencies: {
|
|
724
724
|
requires: [],
|
|
725
725
|
},
|
|
@@ -740,9 +740,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
740
740
|
dns_domain: {
|
|
741
741
|
category: "dns",
|
|
742
742
|
description: "DNS Domain in a given namespace. If one already exist it will give a error",
|
|
743
|
-
required: ["name", "
|
|
743
|
+
required: ["name", "dnssec_mode"],
|
|
744
744
|
minimal_config:
|
|
745
|
-
'resource "xcsh_dns_domain" "example" {\n name = "example-dns-domain"\n namespace = "
|
|
745
|
+
'resource "xcsh_dns_domain" "example" {\n name = "example-dns-domain"\n namespace = "system"\n\n dnssec_mode = "DNSSEC_DISABLE"\n}',
|
|
746
746
|
dependencies: {
|
|
747
747
|
requires: [],
|
|
748
748
|
},
|
|
@@ -751,9 +751,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
751
751
|
dns_lb_health_check: {
|
|
752
752
|
category: "dns",
|
|
753
753
|
description: "DNS Load Balancer Health Check in a given namespace. If one already exist it will give a error",
|
|
754
|
-
required: ["name"
|
|
754
|
+
required: ["name"],
|
|
755
755
|
minimal_config:
|
|
756
|
-
'resource "xcsh_dns_lb_health_check" "example" {\n name = "example-dns-lb-health-check"\n namespace = "
|
|
756
|
+
'resource "xcsh_dns_lb_health_check" "example" {\n name = "example-dns-lb-health-check"\n namespace = "system"\n}',
|
|
757
757
|
dependencies: {
|
|
758
758
|
requires: [],
|
|
759
759
|
},
|
|
@@ -762,9 +762,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
762
762
|
dns_lb_pool: {
|
|
763
763
|
category: "dns",
|
|
764
764
|
description: "DNS Load Balancer Pool in a given namespace. If one already exist it will give a error",
|
|
765
|
-
required: ["name", "
|
|
765
|
+
required: ["name", "load_balancing_mode"],
|
|
766
766
|
minimal_config:
|
|
767
|
-
'resource "xcsh_dns_lb_pool" "example" {\n name = "example-dns-lb-pool"\n namespace = "
|
|
767
|
+
'resource "xcsh_dns_lb_pool" "example" {\n name = "example-dns-lb-pool"\n namespace = "system"\n\n load_balancing_mode = "ROUND_ROBIN"\n}',
|
|
768
768
|
dependencies: {
|
|
769
769
|
requires: [],
|
|
770
770
|
},
|
|
@@ -795,9 +795,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
795
795
|
dns_zone: {
|
|
796
796
|
category: "dns",
|
|
797
797
|
description: "DNS Zone in a given namespace. If one already exist it will give a error",
|
|
798
|
-
required: ["name"
|
|
798
|
+
required: ["name"],
|
|
799
799
|
minimal_config:
|
|
800
|
-
'resource "xcsh_dns_zone" "example" {\n name = "example-dns-zone"\n namespace = "
|
|
800
|
+
'resource "xcsh_dns_zone" "example" {\n name = "example-dns-zone"\n namespace = "system"\n}',
|
|
801
801
|
dependencies: {
|
|
802
802
|
requires: [],
|
|
803
803
|
},
|
|
@@ -806,9 +806,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
806
806
|
endpoint: {
|
|
807
807
|
category: "load-balancing",
|
|
808
808
|
description: "Endpoint will create the object in the storage backend for namespace metadata.namespace",
|
|
809
|
-
required: ["name", "
|
|
809
|
+
required: ["name", "health_check_port", "port", "protocol"],
|
|
810
810
|
minimal_config:
|
|
811
|
-
'resource "xcsh_endpoint" "example" {\n name = "example-endpoint"\n namespace = "
|
|
811
|
+
'resource "xcsh_endpoint" "example" {\n name = "example-endpoint"\n namespace = "system"\n\n health_check_port = 1\n port = 1\n protocol = "example-value"\n}',
|
|
812
812
|
dependencies: {
|
|
813
813
|
requires: [],
|
|
814
814
|
},
|
|
@@ -851,9 +851,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
851
851
|
fast_acl_rule: {
|
|
852
852
|
category: "security",
|
|
853
853
|
description: "New Fast ACL rule, has specification to match source IP, source port and action to apply",
|
|
854
|
-
required: ["name"
|
|
854
|
+
required: ["name"],
|
|
855
855
|
minimal_config:
|
|
856
|
-
'resource "xcsh_fast_acl_rule" "example" {\n name = "example-fast-acl-rule"\n namespace = "
|
|
856
|
+
'resource "xcsh_fast_acl_rule" "example" {\n name = "example-fast-acl-rule"\n namespace = "system"\n}',
|
|
857
857
|
dependencies: {
|
|
858
858
|
requires: [],
|
|
859
859
|
},
|
|
@@ -875,14 +875,13 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
875
875
|
description: "Fleet will create a fleet object in 'system' namespace of the user",
|
|
876
876
|
required: [
|
|
877
877
|
"name",
|
|
878
|
-
"namespace",
|
|
879
878
|
"enable_default_fleet_config_download",
|
|
880
879
|
"fleet_label",
|
|
881
880
|
"operating_system_version",
|
|
882
881
|
"volterra_software_version",
|
|
883
882
|
],
|
|
884
883
|
minimal_config:
|
|
885
|
-
'resource "xcsh_fleet" "example" {\n name = "example-fleet"\n namespace = "
|
|
884
|
+
'resource "xcsh_fleet" "example" {\n name = "example-fleet"\n namespace = "system"\n\n fleet_label = "example-value"\n enable_default_fleet_config_download = true\n operating_system_version = "example-value"\n volterra_software_version = "example-value"\n}',
|
|
886
885
|
dependencies: {
|
|
887
886
|
requires: [],
|
|
888
887
|
},
|
|
@@ -913,9 +912,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
913
912
|
gcp_vpc_site: {
|
|
914
913
|
category: "sites",
|
|
915
914
|
description: "Deploying F5 sites within Google Cloud VPC environments",
|
|
916
|
-
required: ["name", "
|
|
915
|
+
required: ["name", "address", "disk_size", "gcp_region", "instance_type", "ssh_key"],
|
|
917
916
|
minimal_config:
|
|
918
|
-
'resource "xcsh_gcp_vpc_site" "example" {\n name = "example-gcp-vpc-site"\n namespace = "
|
|
917
|
+
'resource "xcsh_gcp_vpc_site" "example" {\n name = "example-gcp-vpc-site"\n namespace = "system"\n\n gcp_region = "example-value"\n instance_type = "example-value"\n ssh_key = "example-value"\n address = "example-value"\n disk_size = 1\n}',
|
|
919
918
|
dependencies: {
|
|
920
919
|
requires: [],
|
|
921
920
|
},
|
|
@@ -937,7 +936,7 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
937
936
|
description: "New Global Log Receiver object",
|
|
938
937
|
required: ["name", "namespace", "log_type", "receiver_choice"],
|
|
939
938
|
minimal_config:
|
|
940
|
-
'resource "xcsh_global_log_receiver" "example" {\n name = "example-global-log-receiver"\n namespace = "
|
|
939
|
+
'resource "xcsh_global_log_receiver" "example" {\n name = "example-global-log-receiver"\n namespace = "system"\n}',
|
|
941
940
|
dependencies: {
|
|
942
941
|
requires: [],
|
|
943
942
|
},
|
|
@@ -1039,7 +1038,7 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
1039
1038
|
description: "K8s_cluster will create the object in the storage backend for namespace metadata.namespace",
|
|
1040
1039
|
required: ["name", "namespace"],
|
|
1041
1040
|
minimal_config:
|
|
1042
|
-
'resource "xcsh_k8s_cluster" "example" {\n name = "example-k8s-cluster"\n namespace = "
|
|
1041
|
+
'resource "xcsh_k8s_cluster" "example" {\n name = "example-k8s-cluster"\n namespace = "system"\n}',
|
|
1043
1042
|
dependencies: {
|
|
1044
1043
|
requires: [],
|
|
1045
1044
|
},
|
|
@@ -1048,9 +1047,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
1048
1047
|
k8s_cluster_role: {
|
|
1049
1048
|
category: "kubernetes",
|
|
1050
1049
|
description: "K8s_cluster_role will create the object in the storage backend for namespace metadata.namespace",
|
|
1051
|
-
required: ["name"
|
|
1050
|
+
required: ["name"],
|
|
1052
1051
|
minimal_config:
|
|
1053
|
-
'resource "xcsh_k8s_cluster_role" "example" {\n name = "example-k8s-cluster-role"\n namespace = "
|
|
1052
|
+
'resource "xcsh_k8s_cluster_role" "example" {\n name = "example-k8s-cluster-role"\n namespace = "system"\n}',
|
|
1054
1053
|
dependencies: {
|
|
1055
1054
|
requires: [],
|
|
1056
1055
|
},
|
|
@@ -1060,9 +1059,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
1060
1059
|
category: "kubernetes",
|
|
1061
1060
|
description:
|
|
1062
1061
|
"K8s_cluster_role_binding will create the object in the storage backend for namespace metadata.namespace",
|
|
1063
|
-
required: ["name"
|
|
1062
|
+
required: ["name"],
|
|
1064
1063
|
minimal_config:
|
|
1065
|
-
'resource "xcsh_k8s_cluster_role_binding" "example" {\n name = "example-k8s-cluster-role-binding"\n namespace = "
|
|
1064
|
+
'resource "xcsh_k8s_cluster_role_binding" "example" {\n name = "example-k8s-cluster-role-binding"\n namespace = "system"\n}',
|
|
1066
1065
|
dependencies: {
|
|
1067
1066
|
requires: [],
|
|
1068
1067
|
},
|
|
@@ -1094,9 +1093,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
1094
1093
|
log_receiver: {
|
|
1095
1094
|
category: "monitoring",
|
|
1096
1095
|
description: "New Log Receiver object",
|
|
1097
|
-
required: ["name"
|
|
1096
|
+
required: ["name"],
|
|
1098
1097
|
minimal_config:
|
|
1099
|
-
'resource "xcsh_log_receiver" "example" {\n name = "example-log-receiver"\n namespace = "
|
|
1098
|
+
'resource "xcsh_log_receiver" "example" {\n name = "example-log-receiver"\n namespace = "system"\n}',
|
|
1100
1099
|
dependencies: {
|
|
1101
1100
|
requires: [],
|
|
1102
1101
|
},
|
|
@@ -1140,9 +1139,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
1140
1139
|
nat_policy: {
|
|
1141
1140
|
category: "security",
|
|
1142
1141
|
description: "Nat policy create specification configures nat policy with multiple rules,. configuration",
|
|
1143
|
-
required: ["name"
|
|
1142
|
+
required: ["name"],
|
|
1144
1143
|
minimal_config:
|
|
1145
|
-
'resource "xcsh_nat_policy" "example" {\n name = "example-nat-policy"\n namespace = "
|
|
1144
|
+
'resource "xcsh_nat_policy" "example" {\n name = "example-nat-policy"\n namespace = "system"\n}',
|
|
1146
1145
|
dependencies: {
|
|
1147
1146
|
requires: [],
|
|
1148
1147
|
},
|
|
@@ -1151,9 +1150,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
1151
1150
|
network_connector: {
|
|
1152
1151
|
category: "networking",
|
|
1153
1152
|
description: "Network connector is created by users in system namespace. configuration",
|
|
1154
|
-
required: ["name"
|
|
1153
|
+
required: ["name"],
|
|
1155
1154
|
minimal_config:
|
|
1156
|
-
'resource "xcsh_network_connector" "example" {\n name = "example-network-connector"\n namespace = "
|
|
1155
|
+
'resource "xcsh_network_connector" "example" {\n name = "example-network-connector"\n namespace = "system"\n}',
|
|
1157
1156
|
dependencies: {
|
|
1158
1157
|
requires: [],
|
|
1159
1158
|
},
|
|
@@ -1164,7 +1163,7 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
1164
1163
|
description: "Network firewall is created by users in system namespace. configuration",
|
|
1165
1164
|
required: ["name", "namespace"],
|
|
1166
1165
|
minimal_config:
|
|
1167
|
-
'resource "xcsh_network_firewall" "example" {\n name = "example-network-firewall"\n namespace = "
|
|
1166
|
+
'resource "xcsh_network_firewall" "example" {\n name = "example-network-firewall"\n namespace = "system"\n}',
|
|
1168
1167
|
dependencies: {
|
|
1169
1168
|
requires: [],
|
|
1170
1169
|
},
|
|
@@ -1174,9 +1173,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
1174
1173
|
category: "networking",
|
|
1175
1174
|
description:
|
|
1176
1175
|
"Network interface represents configuration of a network device. it is created by users in system namespace. configuration",
|
|
1177
|
-
required: ["name"
|
|
1176
|
+
required: ["name"],
|
|
1178
1177
|
minimal_config:
|
|
1179
|
-
'resource "xcsh_network_interface" "example" {\n name = "example-network-interface"\n namespace = "
|
|
1178
|
+
'resource "xcsh_network_interface" "example" {\n name = "example-network-interface"\n namespace = "system"\n}',
|
|
1180
1179
|
dependencies: {
|
|
1181
1180
|
requires: [],
|
|
1182
1181
|
},
|
|
@@ -1196,9 +1195,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
1196
1195
|
network_policy_rule: {
|
|
1197
1196
|
category: "security",
|
|
1198
1197
|
description: "Network policy rule with configured parameters in specified namespace",
|
|
1199
|
-
required: ["name"
|
|
1198
|
+
required: ["name"],
|
|
1200
1199
|
minimal_config:
|
|
1201
|
-
'resource "xcsh_network_policy_rule" "example" {\n name = "example-network-policy-rule"\n namespace = "
|
|
1200
|
+
'resource "xcsh_network_policy_rule" "example" {\n name = "example-network-policy-rule"\n namespace = "system"\n}',
|
|
1202
1201
|
dependencies: {
|
|
1203
1202
|
requires: [],
|
|
1204
1203
|
},
|
|
@@ -1218,9 +1217,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
1218
1217
|
nfv_service: {
|
|
1219
1218
|
category: "networking",
|
|
1220
1219
|
description: "New NFV service with configured parameters",
|
|
1221
|
-
required: ["name"
|
|
1220
|
+
required: ["name"],
|
|
1222
1221
|
minimal_config:
|
|
1223
|
-
'resource "xcsh_nfv_service" "example" {\n name = "example-nfv-service"\n namespace = "
|
|
1222
|
+
'resource "xcsh_nfv_service" "example" {\n name = "example-nfv-service"\n namespace = "system"\n}',
|
|
1224
1223
|
dependencies: {
|
|
1225
1224
|
requires: [],
|
|
1226
1225
|
},
|
|
@@ -1230,9 +1229,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
1230
1229
|
category: "networking",
|
|
1231
1230
|
description:
|
|
1232
1231
|
"Api to create nginx service discovery object for a site or virtual site in system namespace. configuration",
|
|
1233
|
-
required: ["name"
|
|
1232
|
+
required: ["name"],
|
|
1234
1233
|
minimal_config:
|
|
1235
|
-
'resource "xcsh_nginx_service_discovery" "example" {\n name = "example-nginx-service-discovery"\n namespace = "
|
|
1234
|
+
'resource "xcsh_nginx_service_discovery" "example" {\n name = "example-nginx-service-discovery"\n namespace = "system"\n}',
|
|
1236
1235
|
dependencies: {
|
|
1237
1236
|
requires: [],
|
|
1238
1237
|
},
|
|
@@ -1279,7 +1278,7 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
1279
1278
|
"Protocol Inspection Specification in a given namespace. If one already exists it will give an error",
|
|
1280
1279
|
required: ["name", "namespace", "enable_disable_compliance_checks", "enable_disable_signatures"],
|
|
1281
1280
|
minimal_config:
|
|
1282
|
-
'resource "xcsh_protocol_inspection" "example" {\n name = "example-protocol-inspection"\n namespace = "
|
|
1281
|
+
'resource "xcsh_protocol_inspection" "example" {\n name = "example-protocol-inspection"\n namespace = "system"\n}',
|
|
1283
1282
|
dependencies: {
|
|
1284
1283
|
requires: [],
|
|
1285
1284
|
},
|
|
@@ -1344,9 +1343,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
1344
1343
|
secret_management_access: {
|
|
1345
1344
|
category: "authentication",
|
|
1346
1345
|
description: "Secret_management_access creates a new object in storage backend for metadata.namespace",
|
|
1347
|
-
required: ["name", "
|
|
1346
|
+
required: ["name", "provider_name"],
|
|
1348
1347
|
minimal_config:
|
|
1349
|
-
'resource "xcsh_secret_management_access" "example" {\n name = "example-secret-management-access"\n namespace = "
|
|
1348
|
+
'resource "xcsh_secret_management_access" "example" {\n name = "example-secret-management-access"\n namespace = "system"\n\n provider_name = "example-value"\n}',
|
|
1350
1349
|
dependencies: {
|
|
1351
1350
|
requires: [],
|
|
1352
1351
|
},
|
|
@@ -1355,9 +1354,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
1355
1354
|
securemesh_site: {
|
|
1356
1355
|
category: "sites",
|
|
1357
1356
|
description: "Deploying secure mesh edge sites with distributed security capabilities",
|
|
1358
|
-
required: ["name", "
|
|
1357
|
+
required: ["name", "address", "volterra_certified_hw"],
|
|
1359
1358
|
minimal_config:
|
|
1360
|
-
'resource "xcsh_securemesh_site" "example" {\n name = "example-securemesh-site"\n namespace = "
|
|
1359
|
+
'resource "xcsh_securemesh_site" "example" {\n name = "example-securemesh-site"\n namespace = "system"\n\n volterra_certified_hw = "example-value"\n worker_nodes = ["example-value"]\n address = "example-value"\n}',
|
|
1361
1360
|
dependencies: {
|
|
1362
1361
|
requires: [],
|
|
1363
1362
|
},
|
|
@@ -1366,9 +1365,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
1366
1365
|
securemesh_site_v2: {
|
|
1367
1366
|
category: "sites",
|
|
1368
1367
|
description: "Deploying secure mesh edge sites with enhanced security and networking features",
|
|
1369
|
-
required: ["name"
|
|
1368
|
+
required: ["name"],
|
|
1370
1369
|
minimal_config:
|
|
1371
|
-
'resource "xcsh_securemesh_site_v2" "example" {\n name = "example-securemesh-site-v2"\n namespace = "
|
|
1370
|
+
'resource "xcsh_securemesh_site_v2" "example" {\n name = "example-securemesh-site-v2"\n namespace = "system"\n}',
|
|
1372
1371
|
dependencies: {
|
|
1373
1372
|
requires: [],
|
|
1374
1373
|
},
|
|
@@ -1421,9 +1420,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
1421
1420
|
site: {
|
|
1422
1421
|
category: "sites",
|
|
1423
1422
|
description: "Virtual site object in given namespace",
|
|
1424
|
-
required: ["name", "
|
|
1423
|
+
required: ["name", "site_type"],
|
|
1425
1424
|
minimal_config:
|
|
1426
|
-
'resource "xcsh_site" "example" {\n name = "example-site"\n namespace = "
|
|
1425
|
+
'resource "xcsh_site" "example" {\n name = "example-site"\n namespace = "system"\n\n site_type = "INVALID"\n}',
|
|
1427
1426
|
dependencies: {
|
|
1428
1427
|
requires: [],
|
|
1429
1428
|
},
|
|
@@ -1432,9 +1431,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
1432
1431
|
site_mesh_group: {
|
|
1433
1432
|
category: "sites",
|
|
1434
1433
|
description: "Site Mesh Group in system namespace of user",
|
|
1435
|
-
required: ["name"
|
|
1434
|
+
required: ["name"],
|
|
1436
1435
|
minimal_config:
|
|
1437
|
-
'resource "xcsh_site_mesh_group" "example" {\n name = "example-site-mesh-group"\n namespace = "
|
|
1436
|
+
'resource "xcsh_site_mesh_group" "example" {\n name = "example-site-mesh-group"\n namespace = "system"\n}',
|
|
1438
1437
|
dependencies: {
|
|
1439
1438
|
requires: [],
|
|
1440
1439
|
},
|
|
@@ -1483,9 +1482,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
1483
1482
|
tenant_configuration: {
|
|
1484
1483
|
category: "organization",
|
|
1485
1484
|
description: "Tenant configuration specification. configuration",
|
|
1486
|
-
required: ["name"
|
|
1485
|
+
required: ["name"],
|
|
1487
1486
|
minimal_config:
|
|
1488
|
-
'resource "xcsh_tenant_configuration" "example" {\n name = "example-tenant-configuration"\n namespace = "
|
|
1487
|
+
'resource "xcsh_tenant_configuration" "example" {\n name = "example-tenant-configuration"\n namespace = "system"\n}',
|
|
1489
1488
|
dependencies: {
|
|
1490
1489
|
requires: [],
|
|
1491
1490
|
},
|
|
@@ -1527,9 +1526,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
1527
1526
|
usb_policy: {
|
|
1528
1527
|
category: "security",
|
|
1529
1528
|
description: "New USB policy object",
|
|
1530
|
-
required: ["name"
|
|
1529
|
+
required: ["name"],
|
|
1531
1530
|
minimal_config:
|
|
1532
|
-
'resource "xcsh_usb_policy" "example" {\n name = "example-usb-policy"\n namespace = "
|
|
1531
|
+
'resource "xcsh_usb_policy" "example" {\n name = "example-usb-policy"\n namespace = "system"\n}',
|
|
1533
1532
|
dependencies: {
|
|
1534
1533
|
requires: [],
|
|
1535
1534
|
},
|
|
@@ -1581,9 +1580,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
1581
1580
|
virtual_network: {
|
|
1582
1581
|
category: "networking",
|
|
1583
1582
|
description: "Virtual network in given namespace",
|
|
1584
|
-
required: ["name", "
|
|
1583
|
+
required: ["name", "legacy_type"],
|
|
1585
1584
|
minimal_config:
|
|
1586
|
-
'resource "xcsh_virtual_network" "example" {\n name = "example-virtual-network"\n namespace = "
|
|
1585
|
+
'resource "xcsh_virtual_network" "example" {\n name = "example-virtual-network"\n namespace = "system"\n\n legacy_type = "VIRTUAL_NETWORK_SITE_LOCAL"\n}',
|
|
1587
1586
|
dependencies: {
|
|
1588
1587
|
requires: [],
|
|
1589
1588
|
},
|
|
@@ -1594,7 +1593,7 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
1594
1593
|
description: "Virtual site object in given namespace",
|
|
1595
1594
|
required: ["name", "namespace", "site_type", "site_selector"],
|
|
1596
1595
|
minimal_config:
|
|
1597
|
-
'resource "xcsh_virtual_site" "example" {\n name = "example-virtual-site"\n namespace = "
|
|
1596
|
+
'resource "xcsh_virtual_site" "example" {\n name = "example-virtual-site"\n namespace = "system"\n\n site_type = "INVALID"\n}',
|
|
1598
1597
|
dependencies: {
|
|
1599
1598
|
requires: [],
|
|
1600
1599
|
},
|
|
@@ -1603,9 +1602,9 @@ export const TERRAFORM_INDEX: TerraformIndex = {
|
|
|
1603
1602
|
voltstack_site: {
|
|
1604
1603
|
category: "sites",
|
|
1605
1604
|
description: "Deploying Volterra stack sites for edge computing",
|
|
1606
|
-
required: ["name", "
|
|
1605
|
+
required: ["name", "address", "volterra_certified_hw"],
|
|
1607
1606
|
minimal_config:
|
|
1608
|
-
'resource "xcsh_voltstack_site" "example" {\n name = "example-voltstack-site"\n namespace = "
|
|
1607
|
+
'resource "xcsh_voltstack_site" "example" {\n name = "example-voltstack-site"\n namespace = "system"\n\n volterra_certified_hw = "example-value"\n worker_nodes = ["example-value"]\n address = "example-value"\n}',
|
|
1609
1608
|
dependencies: {
|
|
1610
1609
|
requires: [],
|
|
1611
1610
|
},
|
|
@@ -2658,8 +2658,12 @@ export class AgentSession {
|
|
|
2658
2658
|
);
|
|
2659
2659
|
}
|
|
2660
2660
|
|
|
2661
|
-
// Validate API key
|
|
2662
|
-
|
|
2661
|
+
// Validate API key. Capture the guard-narrowed model into a local: TS narrowing
|
|
2662
|
+
// of the `this.model` getter does not persist into the ttftAttr closure below.
|
|
2663
|
+
const model = this.model;
|
|
2664
|
+
const apiKey = await logger.ttftAttr("ttft.getapikey", () =>
|
|
2665
|
+
this.#modelRegistry.getApiKey(model, this.sessionId),
|
|
2666
|
+
);
|
|
2663
2667
|
if (!apiKey) {
|
|
2664
2668
|
throw new Error(
|
|
2665
2669
|
`No API key found for ${this.model.provider}.\n\n` +
|
|
@@ -2674,20 +2678,23 @@ export class AgentSession {
|
|
|
2674
2678
|
}
|
|
2675
2679
|
|
|
2676
2680
|
// Build messages array (session context, eager todo prelude, then active prompt message)
|
|
2677
|
-
const messages: AgentMessage[] =
|
|
2678
|
-
|
|
2679
|
-
|
|
2680
|
-
|
|
2681
|
-
|
|
2682
|
-
|
|
2683
|
-
|
|
2684
|
-
|
|
2685
|
-
|
|
2686
|
-
|
|
2687
|
-
|
|
2688
|
-
|
|
2681
|
+
const messages: AgentMessage[] = await logger.ttftAttr("ttft.build-context", async () => {
|
|
2682
|
+
const built: AgentMessage[] = [];
|
|
2683
|
+
const planReferenceMessage = await this.#buildPlanReferenceMessage?.();
|
|
2684
|
+
if (planReferenceMessage) {
|
|
2685
|
+
built.push(planReferenceMessage);
|
|
2686
|
+
}
|
|
2687
|
+
const planModeMessage = await this.#buildPlanModeMessage();
|
|
2688
|
+
if (planModeMessage) {
|
|
2689
|
+
built.push(planModeMessage);
|
|
2690
|
+
}
|
|
2691
|
+
if (options?.prependMessages) {
|
|
2692
|
+
built.push(...options.prependMessages);
|
|
2693
|
+
}
|
|
2689
2694
|
|
|
2690
|
-
|
|
2695
|
+
built.push(message);
|
|
2696
|
+
return built;
|
|
2697
|
+
});
|
|
2691
2698
|
|
|
2692
2699
|
// Early bail-out: if a newer abort/prompt cycle started during setup,
|
|
2693
2700
|
// return before mutating shared state (nextTurn messages, system prompt).
|
|
@@ -2711,12 +2718,12 @@ export class AgentSession {
|
|
|
2711
2718
|
messages.push(...fileMentionMessages);
|
|
2712
2719
|
}
|
|
2713
2720
|
|
|
2714
|
-
// Emit before_agent_start extension event
|
|
2721
|
+
// Emit before_agent_start extension event. Capture the narrowed runner into a
|
|
2722
|
+
// local: the `this.#extensionRunner` guard does not narrow inside the closure.
|
|
2715
2723
|
if (this.#extensionRunner) {
|
|
2716
|
-
const
|
|
2717
|
-
|
|
2718
|
-
options?.images,
|
|
2719
|
-
this.#baseSystemPrompt,
|
|
2724
|
+
const runner = this.#extensionRunner;
|
|
2725
|
+
const result = await logger.ttftAttr("ttft.before-agent-start-hook", () =>
|
|
2726
|
+
runner.emitBeforeAgentStart(expandedText, options?.images, this.#baseSystemPrompt),
|
|
2720
2727
|
);
|
|
2721
2728
|
if (result?.messages) {
|
|
2722
2729
|
const promptAttribution: "user" | "agent" | undefined =
|
|
@@ -2747,7 +2754,9 @@ export class AgentSession {
|
|
|
2747
2754
|
}
|
|
2748
2755
|
|
|
2749
2756
|
const agentPromptOptions = options?.toolChoice ? { toolChoice: options.toolChoice } : undefined;
|
|
2750
|
-
await
|
|
2757
|
+
await logger.ttftAttr("ttft.agent-loop-total", () =>
|
|
2758
|
+
this.#promptAgentWithIdleRetry(messages, agentPromptOptions),
|
|
2759
|
+
);
|
|
2751
2760
|
if (!options?.skipPostPromptRecoveryWait) {
|
|
2752
2761
|
await this.#waitForPostPromptRecovery();
|
|
2753
2762
|
}
|