@salesforce/plugin-agent 1.38.0 → 1.38.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/README.md +23 -23
  2. package/oclif.manifest.json +495 -495
  3. package/package.json +4 -4
@@ -409,14 +409,16 @@
409
409
  "preview:agent"
410
410
  ]
411
411
  },
412
- "agent:preview:end": {
412
+ "agent:generate:agent-spec": {
413
413
  "aliases": [],
414
414
  "args": {},
415
- "description": "You must have previously started a programmatic agent preview session with the \"agent preview start\" command to then use this command to end it. This command also displays the local directory where the session trace files are stored.\n\nThe original \"agent preview start\" command outputs a session ID which you then use with the --session-id flag of this command to end the session. You don't have to specify the --session-id flag if an agent has only one active preview session. You must also use either the --authoring-bundle or --api-name flag to specify the API name of the authoring bundle or the published agent, respecitvely. To find either API name, navigate to your package directory in your DX project. The API name of an authoring bundle is the same as its directory name under the \"aiAuthoringBundles\" metadata directory. Similarly, the published agent's API name is the same as its directory name under the \"Bots\" metadata directory.",
415
+ "description": "An agent spec is a YAML-formatted file that contains basic information about the agent, such as its role, company description, and an AI-generated list of topics based on this information. Topics define the range of jobs your agent can handle.\n\nUse flags, such as --role and --company-description, to provide details about your company and the role that the agent plays in your company. If you prefer, you can also be prompted for the basic information; use --full-interview to be prompted for all required and optional properties. Upon command execution, the large language model (LLM) associated with your org uses the provided information to generate a list of topics for the agent. Because the LLM uses the company and role information to generate the topics, we recommend that you provide accurate, complete, and specific details so the LLM generates the best and most relevant topics. Once generated, you can edit the spec file; for example, you can remove topics that don't apply or change a topic's description.\n\nYou can also iterate the spec generation process by using the --spec flag to pass an existing agent spec file to this command, and then using the --role, --company-description, etc, flags to refine your agent properties. Iteratively improving the description of your agent allows the LLM to generate progressively better topics.\n\nYou can also specify other agent properties, such as a custom prompt template, how to ground the prompt template to add context to the agent's prompts, the tone of the prompts, and the username of a user in the org to assign to the agent.\n\nWhen your agent spec is ready, generate an authoring bundle from it by passing the spec file to the --spec flag of the \"agent generate authoring-bundle\" CLI command. An authoring bundle is a metadata type that contains an Agent Script file, which is the blueprint for an agent. (While not recommended, you can also use the agent spec file to immediately create an agent with the \"agent create\" command. We don't recommend this workflow because these types of agents don't use Agent Script, and are thus less flexible and more difficult to maintain.)",
416
416
  "examples": [
417
- "End a preview session of a published agent by specifying its session ID and API name ; use the default org:\n<%= config.bin %> <%= command.id %> --session-id <SESSION_ID> --api-name My_Published_Agent",
418
- "Similar to previous example, but don't specify a session ID; you get an error if the published agent has more than one active session. Use the org with alias \"my-dev-org\":\n<%= config.bin %> <%= command.id %> --api-name My_Published_Agent --target-org my-dev-org",
419
- "End a preview session of an agent using its authoring bundle API name; you get an error if the agent has more than one active session.\n<%= config.bin %> <%= command.id %> --authoring-bundle My_Local_Agent"
417
+ "Generate an agent spec in the default location and use flags to specify the agent properties, such as its role and your company details; use your default org:\n<%= config.bin %> <%= command.id %> --type customer --role \"Field customer complaints and manage employee schedules.\" --company-name \"Coral Cloud Resorts\" --company-description \"Provide customers with exceptional destination activities, unforgettable experiences, and reservation services.\"",
418
+ "Generate an agent spec by being prompted for the required agent properties and generate a maxiumum of 5 topics; write the generated file to the \"specs/resortManagerSpec.yaml\" file and use the org with alias \"my-org\":\n<%= config.bin %> <%= command.id %> --max-topics 5 --output-file specs/resortManagerAgent.yaml --target-org my-org",
419
+ "Be prompted for all required and optional agent properties; use your default org:\n<%= config.bin %> <%= command.id %> --full-interview",
420
+ "Specify an existing agent spec file called \"specs/resortManagerAgent.yaml\", and then overwrite it with a new version that contains newly AI-generated topics based on the updated role information passed in with the --role flag:\n<%= config.bin %> <%= command.id %> --spec specs/resortManagerAgent.yaml --output-file specs/resortManagerAgent.yaml --role \"Field customer complaints, manage employee schedules, and ensure all resort operations are running smoothly\"",
421
+ "Specify that the conversational tone of the agent is formal and to attach the \"resortmanager@myorg.com\" username to it; be prompted for the required properties and use your default org:\n<%= config.bin %> <%= command.id %> --tone formal --agent-user resortmanager@myorg.com"
420
422
  ],
421
423
  "flags": {
422
424
  "json": {
@@ -451,96 +453,164 @@
451
453
  "multiple": false,
452
454
  "type": "option"
453
455
  },
454
- "session-id": {
455
- "name": "session-id",
456
- "required": false,
457
- "summary": "Session ID outputted by \"agent preview start\". Not required when the agent has exactly one active session. Run \"agent preview sessions\" to see the list of all sessions.",
456
+ "type": {
457
+ "name": "type",
458
+ "summary": "Type of agent to create. Internal types are copilots used internally by your company and customer types are the agents you create for your customers.",
458
459
  "hasDynamicHelp": false,
459
460
  "multiple": false,
461
+ "options": [
462
+ "customer",
463
+ "internal"
464
+ ],
460
465
  "type": "option"
461
466
  },
462
- "api-name": {
463
- "char": "n",
464
- "name": "api-name",
465
- "summary": "API name of the activated published agent you want to preview.",
467
+ "role": {
468
+ "name": "role",
469
+ "summary": "Role of the agent.",
466
470
  "hasDynamicHelp": false,
467
471
  "multiple": false,
468
472
  "type": "option"
469
473
  },
470
- "authoring-bundle": {
471
- "name": "authoring-bundle",
472
- "summary": "API name of the authoring bundle metadata component that contains the agent's Agent Script file.",
474
+ "company-name": {
475
+ "name": "company-name",
476
+ "summary": "Name of your company.",
477
+ "hasDynamicHelp": false,
478
+ "multiple": false,
479
+ "type": "option"
480
+ },
481
+ "company-description": {
482
+ "name": "company-description",
483
+ "summary": "Description of your company.",
484
+ "hasDynamicHelp": false,
485
+ "multiple": false,
486
+ "type": "option"
487
+ },
488
+ "company-website": {
489
+ "name": "company-website",
490
+ "summary": "Website URL of your company.",
491
+ "hasDynamicHelp": false,
492
+ "multiple": false,
493
+ "type": "option"
494
+ },
495
+ "max-topics": {
496
+ "name": "max-topics",
497
+ "summary": "Maximum number of topics to generate in the agent spec; default is 5.",
498
+ "hasDynamicHelp": false,
499
+ "multiple": false,
500
+ "type": "option"
501
+ },
502
+ "agent-user": {
503
+ "name": "agent-user",
504
+ "summary": "Username of a user in your org to assign to your agent; determines what your agent can access and do.",
473
505
  "hasDynamicHelp": false,
474
506
  "multiple": false,
475
507
  "type": "option"
508
+ },
509
+ "enrich-logs": {
510
+ "name": "enrich-logs",
511
+ "summary": "Adds agent conversation data to event logs so you can view all agent session activity in one place.",
512
+ "hasDynamicHelp": false,
513
+ "multiple": false,
514
+ "options": [
515
+ "true",
516
+ "false"
517
+ ],
518
+ "type": "option"
519
+ },
520
+ "tone": {
521
+ "name": "tone",
522
+ "summary": "Conversational style of the agent, such as how it expresses your brand personality in its messages through word choice, punctuation, and sentence structure.",
523
+ "hasDynamicHelp": false,
524
+ "multiple": false,
525
+ "options": [
526
+ "formal",
527
+ "casual",
528
+ "neutral"
529
+ ],
530
+ "type": "option"
531
+ },
532
+ "spec": {
533
+ "name": "spec",
534
+ "summary": "Agent spec file, in YAML format, to use as input to the command.",
535
+ "hasDynamicHelp": false,
536
+ "multiple": false,
537
+ "type": "option"
538
+ },
539
+ "output-file": {
540
+ "name": "output-file",
541
+ "summary": "Path for the generated YAML agent spec file; can be an absolute or relative path.",
542
+ "default": "specs/agentSpec.yaml",
543
+ "hasDynamicHelp": false,
544
+ "multiple": false,
545
+ "type": "option"
546
+ },
547
+ "full-interview": {
548
+ "name": "full-interview",
549
+ "summary": "Prompt for both required and optional flags.",
550
+ "allowNo": false,
551
+ "type": "boolean"
552
+ },
553
+ "prompt-template": {
554
+ "name": "prompt-template",
555
+ "summary": "API name of a customized prompt template to use instead of the default prompt template.",
556
+ "hasDynamicHelp": false,
557
+ "multiple": false,
558
+ "type": "option"
559
+ },
560
+ "grounding-context": {
561
+ "dependsOn": [
562
+ "prompt-template"
563
+ ],
564
+ "name": "grounding-context",
565
+ "summary": "Context information and personalization that's added to your prompts when using a custom prompt template.",
566
+ "hasDynamicHelp": false,
567
+ "multiple": false,
568
+ "type": "option"
569
+ },
570
+ "force-overwrite": {
571
+ "name": "force-overwrite",
572
+ "summary": "Don't prompt the user to confirm that an existing spec file will be overwritten.",
573
+ "allowNo": false,
574
+ "type": "boolean"
476
575
  }
477
576
  },
478
577
  "hasDynamicHelp": true,
479
578
  "hiddenAliases": [],
480
- "id": "agent:preview:end",
579
+ "id": "agent:generate:agent-spec",
481
580
  "pluginAlias": "@salesforce/plugin-agent",
482
581
  "pluginName": "@salesforce/plugin-agent",
483
582
  "pluginType": "core",
484
583
  "strict": true,
485
- "summary": "End an existing programmatic agent preview session and get trace location.",
584
+ "summary": "Generate an agent spec, which is a YAML file that captures what an agent can do.",
486
585
  "enableJsonFlag": true,
487
586
  "requiresProject": true,
488
- "envVariablesSection": {
489
- "header": "ENVIRONMENT VARIABLES",
490
- "body": [
491
- {
492
- "name": "SF_TARGET_ORG",
493
- "description": "Username or alias of your default org. Overrides the target-org configuration variable."
494
- }
495
- ]
496
- },
497
- "errorCodes": {
498
- "header": "ERROR CODES",
499
- "body": [
500
- {
501
- "name": "Succeeded (0)",
502
- "description": "Preview session ended successfully and traces saved."
503
- },
504
- {
505
- "name": "NotFound (2)",
506
- "description": "Agent not found, or no preview session exists for this agent."
507
- },
508
- {
509
- "name": "PreviewEndFailed (4)",
510
- "description": "Failed to end the preview session."
511
- },
512
- {
513
- "name": "SessionAmbiguous (5)",
514
- "description": "Multiple preview sessions found; specify --session-id to choose one."
515
- }
516
- ]
517
- },
518
587
  "isESM": true,
519
588
  "relativePath": [
520
589
  "lib",
521
590
  "commands",
522
591
  "agent",
523
- "preview",
524
- "end.js"
592
+ "generate",
593
+ "agent-spec.js"
525
594
  ],
526
595
  "aliasPermutations": [],
527
596
  "permutations": [
528
- "agent:preview:end",
529
- "preview:agent:end",
530
- "preview:end:agent",
531
- "agent:end:preview",
532
- "end:agent:preview",
533
- "end:preview:agent"
597
+ "agent:generate:agent-spec",
598
+ "generate:agent:agent-spec",
599
+ "generate:agent-spec:agent",
600
+ "agent:agent-spec:generate",
601
+ "agent-spec:agent:generate",
602
+ "agent-spec:generate:agent"
534
603
  ]
535
604
  },
536
- "agent:preview:send": {
605
+ "agent:generate:authoring-bundle": {
537
606
  "aliases": [],
538
607
  "args": {},
539
- "description": "You must have previously started a programmatic agent preview session with the \"agent preview start\" command to then use this command to send the agent a message (utterance). This command then displays the agent's response.\n\nThe original \"agent preview start\" command outputs a session ID which you then use with the --session-id flag of this command to send a message. You don't have to specify the --session-id flag if an agent has only one active preview session. You must also use either the --authoring-bundle or --api-name flag to specify the API name of the authoring bundle or the published agent, respecitvely. To find either API name, navigate to your package directory in your DX project. The API name of an authoring bundle is the same as its directory name under the \"aiAuthoringBundles\" metadata directory. Similarly, the published agent's API name is the same as its directory name under the \"Bots\" metadata directory.",
608
+ "description": "Authoring bundles are metadata components that contain an agent's Agent Script file. The Agent Script file is the agent's blueprint; it fully describes what the agent can do using the Agent Script language.\n\nUse this command to generate a new authoring bundle based on an agent spec YAML file, which you create with the \"agent generate agent-spec\" command. The agent spec YAML file is a high-level description of the agent; it describes its essence rather than exactly what it can do. The resulting Agent Script file is customized to reflect what's in the agent spec file. You can also create an authoring bundle without an agent spec file by specifying the \"--no-spec\" flag; in this case, the resulting Agent Script file is just the default boilerplate.\n\nThe metadata type for authoring bundles is aiAuthoringBundle, which consist of a standard \"<bundle-api-name>.bundle-meta.xml\" metadata file and the Agent Script file (with extension \".agent\"). When you run this command, the new authoring bundle is generated in the force-app/main/default/aiAuthoringBundles/<bundle-api-name> directory. Use the --output-dir flag to generate them elsewhere.\n\nAfter you generate the initial authoring bundle, code the Agent Script file so your agent behaves exactly as you want. The Agent Script file generated by this command is just a first draft of your agent! Interactively test the agent by conversing with it using the \"agent preview\" command. Then publish the agent to your org with the \"agent publish authoring-bundle\" command.\n\nThis command requires an org because it uses it to access an LLM for generating the Agent Script file.",
540
609
  "examples": [
541
- "Send a message to an activated published agent using its API name and session ID; use the default org:\n<%= config.bin %> <%= command.id %> --utterance \"What can you help me with?\" --api-name My_Published_Agent --session-id <SESSION_ID>",
542
- "Similar to previous example, but don't specify a session ID; you get an error if the agent has more than one active session. Use the org with alias \"my-dev-org\":\n<%= config.bin %> <%= command.id %> --utterance \"What can you help me with?\" --api-name My_Published_Agent --target-org my-dev-org",
543
- "Send a message to an agent using its authoring bundle API name; you get an error if the agent has more than one active session:\n<%= config.bin %> <%= command.id %> --utterance \"what can you help me with?\" --authoring-bundle My_Local_Agent"
610
+ "Generate an authoring bundle by being prompted for all required values, such as the agent spec YAML file, the bundle name, and the API name; use your default org:\n<%= config.bin %> <%= command.id %>",
611
+ "Generate an authoring bundle without using an agent spec file; give the bundle the label \"My Authoring Bundle\" and use your default org:\n<%= config.bin %> <%= command.id %> --no-spec --name \"My Authoring Bundle\"",
612
+ "Generate an authoring bundle from the \"specs/agentSpec.yaml\" agent spec YAML file and give it the label \"My Authoring Bundle\"; use your default org:\n<%= config.bin %> <%= command.id %> --spec specs/agentSpec.yaml --name \"My Authoring Bundle\"",
613
+ "Similar to previous example, but generate the authoring bundle files in the \"other-package-dir/main/default\" package directory; use the org with alias \"my-dev-org\":\n<%= config.bin %> <%= command.id %> --spec specs/agentSpec.yaml --name \"My Authoring Bundle\" --output-dir other-package-dir/main/default --target-org my-dev-org"
544
614
  ],
545
615
  "flags": {
546
616
  "json": {
@@ -568,6 +638,13 @@
568
638
  "multiple": false,
569
639
  "type": "option"
570
640
  },
641
+ "api-name": {
642
+ "name": "api-name",
643
+ "summary": "API name of the new authoring bundle; if not specified, the API name is derived from the authoring bundle name (label); the API name can't exist in the org.",
644
+ "hasDynamicHelp": false,
645
+ "multiple": false,
646
+ "type": "option"
647
+ },
571
648
  "api-version": {
572
649
  "description": "Override the api version used for api requests made by this command",
573
650
  "name": "api-version",
@@ -575,103 +652,77 @@
575
652
  "multiple": false,
576
653
  "type": "option"
577
654
  },
578
- "session-id": {
579
- "name": "session-id",
580
- "required": false,
581
- "summary": "Session ID outputted by \"agent preview start\". Not required when the agent has exactly one active session. Run \"agent preview sessions\" to see list of all sessions.",
655
+ "spec": {
656
+ "char": "f",
657
+ "name": "spec",
658
+ "summary": "Path to the agent spec YAML file. If you don't specify the flag, the command provides a list that you can choose from. Use the --no-spec flag to skip using an agent spec entirely.",
582
659
  "hasDynamicHelp": false,
583
660
  "multiple": false,
584
661
  "type": "option"
585
662
  },
586
- "utterance": {
587
- "char": "u",
588
- "name": "utterance",
589
- "required": true,
590
- "summary": "Utterance to send to the agent, enclosed in double quotes.",
663
+ "no-spec": {
664
+ "name": "no-spec",
665
+ "summary": "Skip prompting for an agent spec and use the default Agent Script boilerplate in the generated authoring bundle.",
666
+ "allowNo": false,
667
+ "type": "boolean"
668
+ },
669
+ "output-dir": {
670
+ "char": "d",
671
+ "name": "output-dir",
672
+ "summary": "Directory where the authoring bundle files are generated.",
591
673
  "hasDynamicHelp": false,
592
674
  "multiple": false,
593
675
  "type": "option"
594
676
  },
595
- "api-name": {
677
+ "name": {
596
678
  "char": "n",
597
- "name": "api-name",
598
- "summary": "API name of the activated published agent you want to preview.",
679
+ "name": "name",
680
+ "summary": "Name (label) of the authoring bundle; if not specified, you're prompted for the name.",
599
681
  "hasDynamicHelp": false,
600
682
  "multiple": false,
601
683
  "type": "option"
602
684
  },
603
- "authoring-bundle": {
604
- "name": "authoring-bundle",
605
- "summary": "API name of the authoring bundle metadata component that contains the agent's Agent Script file.",
606
- "hasDynamicHelp": false,
607
- "multiple": false,
608
- "type": "option"
685
+ "force-overwrite": {
686
+ "name": "force-overwrite",
687
+ "summary": "Overwrite the existing authoring bundle if one with the same API name already exists locally.",
688
+ "allowNo": false,
689
+ "type": "boolean"
609
690
  }
610
691
  },
611
692
  "hasDynamicHelp": true,
612
693
  "hiddenAliases": [],
613
- "id": "agent:preview:send",
694
+ "id": "agent:generate:authoring-bundle",
614
695
  "pluginAlias": "@salesforce/plugin-agent",
615
696
  "pluginName": "@salesforce/plugin-agent",
616
697
  "pluginType": "core",
617
698
  "strict": true,
618
- "summary": "Send a message to an existing agent preview session.",
699
+ "summary": "Generate an authoring bundle from an existing agent spec YAML file.",
619
700
  "enableJsonFlag": true,
620
701
  "requiresProject": true,
621
- "envVariablesSection": {
622
- "header": "ENVIRONMENT VARIABLES",
623
- "body": [
624
- {
625
- "name": "SF_TARGET_ORG",
626
- "description": "Username or alias of your default org. Overrides the target-org configuration variable."
627
- }
628
- ]
629
- },
630
- "errorCodes": {
631
- "header": "ERROR CODES",
632
- "body": [
633
- {
634
- "name": "Succeeded (0)",
635
- "description": "Message sent successfully and agent response received."
636
- },
637
- {
638
- "name": "NotFound (2)",
639
- "description": "Agent not found, or no preview session exists for this agent."
640
- },
641
- {
642
- "name": "PreviewSendFailed (4)",
643
- "description": "Failed to send message or receive response from the preview session."
644
- },
645
- {
646
- "name": "SessionAmbiguous (5)",
647
- "description": "Multiple preview sessions found; specify --session-id to choose one."
648
- }
649
- ]
650
- },
651
702
  "isESM": true,
652
703
  "relativePath": [
653
704
  "lib",
654
705
  "commands",
655
706
  "agent",
656
- "preview",
657
- "send.js"
707
+ "generate",
708
+ "authoring-bundle.js"
658
709
  ],
659
710
  "aliasPermutations": [],
660
711
  "permutations": [
661
- "agent:preview:send",
662
- "preview:agent:send",
663
- "preview:send:agent",
664
- "agent:send:preview",
665
- "send:agent:preview",
666
- "send:preview:agent"
712
+ "agent:generate:authoring-bundle",
713
+ "generate:agent:authoring-bundle",
714
+ "generate:authoring-bundle:agent",
715
+ "agent:authoring-bundle:generate",
716
+ "authoring-bundle:agent:generate",
717
+ "authoring-bundle:generate:agent"
667
718
  ]
668
719
  },
669
- "agent:preview:sessions": {
720
+ "agent:generate:template": {
670
721
  "aliases": [],
671
722
  "args": {},
672
- "description": "This command lists the agent preview sessions that were started with the \"agent preview start\" command and are still in the local cache. Use this command to discover specific session IDs that you can pass to the \"agent preview send\" or \"agent preview end\" commands with the --session-id flag.\n\nProgrammatic agent preview sessions can be started for both published activated agents and by using an agent's local authoring bundle, which contains its Agent Script file. In this command's output table, the Agent column contains either the API name of the authoring bundle or the published agent, whichever was used when starting the session. In the table, if the same API name has multiple rows with different session IDs, then it means that you previously started multiple preview sessions with the associated agent.",
723
+ "description": "WARNING: This command doesn't work for agents that were created from an Agent Script file. In other words, you can't currently package an agent template for agents that use Agent Script.\n\nAt a high-level, agents are defined by the Bot, BotVersion, and GenAiPlannerBundle metadata types. The GenAiPlannerBundle type in turn defines the agent's topics and actions. This command uses the metadata files for these three types, located in your local DX project, to generate a BotTemplate metadata file for a specific agent (Bot). You then use the BotTemplate metadata file, along with the GenAiPlannerBundle metadata file that references the BotTemplate, to package the template in a managed package that you can share between orgs or on AppExchange.\n\nUse the --agent-file flag to specify the relative or full pathname of the Bot metadata file, such as force-app/main/default/bots/My_Awesome_Agent/My_Awesome_Agent.bot-meta.xml. A single Bot can have multiple BotVersions, so use the --agent-version flag to specify the version. The corresponding BotVersion metadata file must exist locally. For example, if you specify \"--agent-version 4\", then the file force-app/main/default/bots/My_Awesome_Agent/v4.botVersion-meta.xml must exist.\n\nThe new BotTemplate metadata file is generated in the \"botTemplates\" directory in the output directory specified with the --output-dir flag, and has the name <Agent_API_name>\\_v<Version>\\_Template.botTemplate-meta.xml, such as my-package/botTemplates/My_Awesome_Agent_v4_Template.botTemplate-meta.xml. The command displays the full pathname of the generated files when it completes.\n\nSee \"Develop and Package Agent Templates Using Scratch Orgs\" (https://developer.salesforce.com/docs/atlas.en-us.pkg2_dev.meta/pkg2_dev/dev2gp_package_agent_templates.htm) for details about the complete process, which includes using a scratch org to create and test the agent, retrieving the agent metadata to your DX project, running this command to create the agent template, and then packaging the template.",
673
724
  "examples": [
674
- "List all cached agent preview sessions:\n<%= config.bin %> <%= command.id %>"
725
+ "Generate an agent template from the My_Awesome_Agent Bot metadata file in your DX project and save the BotTemplate and GenAiPlannerBundle to the specified directory; use version 1 of the agent. The agent that the template is based on is in the org with alias \"my-scratch-org\":\n<%= config.bin %> <%= command.id %> --agent-file force-app/main/default/bots/My_Awesome_Agent/My_Awesome_Agent.bot-meta.xml --agent-version 1 --output-dir my-package --source-org my-scratch-org"
675
726
  ],
676
727
  "flags": {
677
728
  "json": {
@@ -688,53 +739,154 @@
688
739
  "hasDynamicHelp": false,
689
740
  "multiple": false,
690
741
  "type": "option"
742
+ },
743
+ "api-version": {
744
+ "description": "Override the api version used for api requests made by this command",
745
+ "name": "api-version",
746
+ "hasDynamicHelp": false,
747
+ "multiple": false,
748
+ "type": "option"
749
+ },
750
+ "source-org": {
751
+ "char": "s",
752
+ "name": "source-org",
753
+ "noCacheDefault": true,
754
+ "required": true,
755
+ "summary": "Username or alias of the namespaced scratch org that contains the agent which this template is based on.",
756
+ "hasDynamicHelp": true,
757
+ "multiple": false,
758
+ "type": "option"
759
+ },
760
+ "agent-version": {
761
+ "name": "agent-version",
762
+ "required": true,
763
+ "summary": "Version of the agent (BotVersion).",
764
+ "hasDynamicHelp": false,
765
+ "multiple": false,
766
+ "type": "option"
767
+ },
768
+ "agent-file": {
769
+ "char": "f",
770
+ "name": "agent-file",
771
+ "required": true,
772
+ "summary": "Path to an agent (Bot) metadata file.",
773
+ "hasDynamicHelp": false,
774
+ "multiple": false,
775
+ "type": "option"
776
+ },
777
+ "output-dir": {
778
+ "char": "r",
779
+ "name": "output-dir",
780
+ "summary": "Directory where the generated BotTemplate and GenAiPlannerBundle files are saved.",
781
+ "hasDynamicHelp": false,
782
+ "multiple": false,
783
+ "type": "option"
691
784
  }
692
785
  },
693
- "hasDynamicHelp": false,
786
+ "hasDynamicHelp": true,
694
787
  "hiddenAliases": [],
695
- "id": "agent:preview:sessions",
788
+ "id": "agent:generate:template",
696
789
  "pluginAlias": "@salesforce/plugin-agent",
697
790
  "pluginName": "@salesforce/plugin-agent",
698
791
  "pluginType": "core",
699
792
  "strict": true,
700
- "summary": "List all known programmatic agent preview sessions.",
793
+ "summary": "Generate an agent template from an existing agent in your DX project so you can then package the template in a second-generation managed package.",
701
794
  "enableJsonFlag": true,
702
795
  "requiresProject": true,
703
- "errorCodes": {
704
- "header": "ERROR CODES",
705
- "body": [
706
- {
707
- "name": "Succeeded (0)",
708
- "description": "Sessions listed successfully (or empty list if no active sessions)."
709
- }
710
- ]
796
+ "isESM": true,
797
+ "relativePath": [
798
+ "lib",
799
+ "commands",
800
+ "agent",
801
+ "generate",
802
+ "template.js"
803
+ ],
804
+ "aliasPermutations": [],
805
+ "permutations": [
806
+ "agent:generate:template",
807
+ "generate:agent:template",
808
+ "generate:template:agent",
809
+ "agent:template:generate",
810
+ "template:agent:generate",
811
+ "template:generate:agent"
812
+ ]
813
+ },
814
+ "agent:generate:test-spec": {
815
+ "aliases": [],
816
+ "args": {},
817
+ "description": "The first step when using Salesforce CLI to create an agent test in your org is to use this interactive command to generate a local YAML-formatted test spec file. The test spec YAML file contains information about the agent being tested, such as its API name, and then one or more test cases. This command uses the metadata components in your DX project when prompting for information, such as the agent API name; it doesn't look in your org.\n\nTo generate a specific agent test case, this command prompts you for this information; when possible, the command provides a list of options for you to choose from:\n\n- Utterance: Natural language statement, question, or command used to test the agent.\n- Expected topic: API name of the topic you expect the agent to use when responding to the utterance.\n- Expected actions: One or more API names of the expection actions the agent takes.\n- Expected outcome: Natural language description of the outcome you expect.\n- (Optional) Custom evaluation: Test an agent's response for specific strings or numbers.\n- (Optional) Conversation history: Boilerplate for additional context you can add to the test in the form of a conversation history.\n\nYou can manually add contextVariables to test cases in the generated YAML file to inject contextual data (such as CaseId or RoutableId) into agent sessions. This is useful for testing agent behavior with different contextual information.\n\nWhen your test spec is ready, you then run the \"agent test create\" command to actually create the test in your org and synchronize the metadata with your DX project. The metadata type for an agent test is AiEvaluationDefinition.\n\nIf you have an existing AiEvaluationDefinition metadata XML file in your DX project, you can generate its equivalent YAML test spec file with the --from-definition flag.",
818
+ "examples": [
819
+ "Generate an agent test spec YAML file interactively:\n<%= config.bin %> <%= command.id %>",
820
+ "Generate an agent test spec YAML file and specify a name for the new file; if the file exists, overwrite it without confirmation:\n<%= config.bin %> <%= command.id %> --output-file specs/Resort_Manager-new-version-testSpec.yaml --force-overwrite",
821
+ "Generate an agent test spec YAML file from an existing AiEvaluationDefinition metadata XML file in your DX project:\n<%= config.bin %> <%= command.id %> --from-definition force-app//main/default/aiEvaluationDefinitions/Resort_Manager_Tests.aiEvaluationDefinition-meta.xml"
822
+ ],
823
+ "flags": {
824
+ "flags-dir": {
825
+ "helpGroup": "GLOBAL",
826
+ "name": "flags-dir",
827
+ "summary": "Import flag values from a directory.",
828
+ "hasDynamicHelp": false,
829
+ "multiple": false,
830
+ "type": "option"
831
+ },
832
+ "from-definition": {
833
+ "char": "d",
834
+ "name": "from-definition",
835
+ "summary": "Filepath to the AIEvaluationDefinition metadata XML file in your DX project that you want to convert to a test spec YAML file.",
836
+ "hasDynamicHelp": false,
837
+ "multiple": false,
838
+ "type": "option"
839
+ },
840
+ "force-overwrite": {
841
+ "name": "force-overwrite",
842
+ "summary": "Don't prompt for confirmation when overwriting an existing test spec YAML file.",
843
+ "allowNo": false,
844
+ "type": "boolean"
845
+ },
846
+ "output-file": {
847
+ "char": "f",
848
+ "name": "output-file",
849
+ "summary": "Name of the generated test spec YAML file. Default value is \"specs/<AGENT_API_NAME>-testSpec.yaml\".",
850
+ "hasDynamicHelp": false,
851
+ "multiple": false,
852
+ "type": "option"
853
+ }
711
854
  },
855
+ "hasDynamicHelp": false,
856
+ "hiddenAliases": [],
857
+ "id": "agent:generate:test-spec",
858
+ "pluginAlias": "@salesforce/plugin-agent",
859
+ "pluginName": "@salesforce/plugin-agent",
860
+ "pluginType": "core",
861
+ "strict": true,
862
+ "summary": "Generate an agent test spec, which is a YAML file that lists the test cases for testing a specific agent.",
863
+ "enableJsonFlag": false,
712
864
  "isESM": true,
713
865
  "relativePath": [
714
866
  "lib",
715
867
  "commands",
716
868
  "agent",
717
- "preview",
718
- "sessions.js"
869
+ "generate",
870
+ "test-spec.js"
719
871
  ],
720
872
  "aliasPermutations": [],
721
873
  "permutations": [
722
- "agent:preview:sessions",
723
- "preview:agent:sessions",
724
- "preview:sessions:agent",
725
- "agent:sessions:preview",
726
- "sessions:agent:preview",
727
- "sessions:preview:agent"
874
+ "agent:generate:test-spec",
875
+ "generate:agent:test-spec",
876
+ "generate:test-spec:agent",
877
+ "agent:test-spec:generate",
878
+ "test-spec:agent:generate",
879
+ "test-spec:generate:agent"
728
880
  ]
729
881
  },
730
- "agent:preview:start": {
882
+ "agent:preview:end": {
731
883
  "aliases": [],
732
884
  "args": {},
733
- "description": "This command outputs a session ID that you then use with the \"agent preview send\" command to send an utterance to the agent. Use the \"agent preview sessions\" command to list all active sessions and the \"agent preview end\" command to end a specific session.\n\nIdentify the agent you want to start previewing with either the --authoring-bundle flag to specify a local authoring bundle's API name or --api-name to specify an activated published agent's API name. To find either API name, navigate to your package directory in your DX project. The API name of an authoring bundle is the same as its directory name under the \"aiAuthoringBundles\" metadata directory. Similarly, the published agent's API name is the same as its directory name under the \"Bots\" metadata directory.\n\nWhen starting a preview session with --authoring-bundle, you must explicitly specify the execution mode using one of these flags:\n\n- --use-live-actions: Executes real Apex classes, flows, and other actions in the org. This surfaces compile and validation errors during preview.\n- --simulate-actions: Uses AI to simulate action execution without calling real implementations.\n\nPublished agents (--api-name) always use live actions. The mode flags are optional and have no effect for published agents.",
885
+ "description": "You must have previously started a programmatic agent preview session with the \"agent preview start\" command to then use this command to end it. This command also displays the local directory where the session trace files are stored.\n\nThe original \"agent preview start\" command outputs a session ID which you then use with the --session-id flag of this command to end the session. You don't have to specify the --session-id flag if an agent has only one active preview session. You must also use either the --authoring-bundle or --api-name flag to specify the API name of the authoring bundle or the published agent, respecitvely. To find either API name, navigate to your package directory in your DX project. The API name of an authoring bundle is the same as its directory name under the \"aiAuthoringBundles\" metadata directory. Similarly, the published agent's API name is the same as its directory name under the \"Bots\" metadata directory.",
734
886
  "examples": [
735
- "Start a programmatic agent preview session by specifying an authoring bundle; use simulated actions. Use the org with alias \"my-dev-org\":\n<%= config.bin %> <%= command.id %> --authoring-bundle My_Agent_Bundle --target-org my-dev-org --simulate-actions",
736
- "Similar to previous example but use live actions and the default org:\n<%= config.bin %> <%= command.id %> --authoring-bundle My_Agent_Bundle --use-live-actions",
737
- "Start a preview session with an activated published agent (always uses live actions):\n<%= config.bin %> <%= command.id %> --api-name My_Published_Agent"
887
+ "End a preview session of a published agent by specifying its session ID and API name ; use the default org:\n<%= config.bin %> <%= command.id %> --session-id <SESSION_ID> --api-name My_Published_Agent",
888
+ "Similar to previous example, but don't specify a session ID; you get an error if the published agent has more than one active session. Use the org with alias \"my-dev-org\":\n<%= config.bin %> <%= command.id %> --api-name My_Published_Agent --target-org my-dev-org",
889
+ "End a preview session of an agent using its authoring bundle API name; you get an error if the agent has more than one active session.\n<%= config.bin %> <%= command.id %> --authoring-bundle My_Local_Agent"
738
890
  ],
739
891
  "flags": {
740
892
  "json": {
@@ -769,6 +921,14 @@
769
921
  "multiple": false,
770
922
  "type": "option"
771
923
  },
924
+ "session-id": {
925
+ "name": "session-id",
926
+ "required": false,
927
+ "summary": "Session ID outputted by \"agent preview start\". Not required when the agent has exactly one active session. Run \"agent preview sessions\" to see the list of all sessions.",
928
+ "hasDynamicHelp": false,
929
+ "multiple": false,
930
+ "type": "option"
931
+ },
772
932
  "api-name": {
773
933
  "char": "n",
774
934
  "name": "api-name",
@@ -783,45 +943,16 @@
783
943
  "hasDynamicHelp": false,
784
944
  "multiple": false,
785
945
  "type": "option"
786
- },
787
- "use-live-actions": {
788
- "exclusive": [
789
- "simulate-actions"
790
- ],
791
- "name": "use-live-actions",
792
- "summary": "Execute real actions in the org (Apex classes, flows, etc.). Required with --authoring-bundle.",
793
- "allowNo": false,
794
- "type": "boolean"
795
- },
796
- "simulate-actions": {
797
- "exclusive": [
798
- "use-live-actions"
799
- ],
800
- "name": "simulate-actions",
801
- "summary": "Use AI to simulate action execution instead of calling real actions. Required with --authoring-bundle.",
802
- "allowNo": false,
803
- "type": "boolean"
804
- },
805
- "agent-json": {
806
- "dependsOn": [
807
- "authoring-bundle"
808
- ],
809
- "hidden": true,
810
- "name": "agent-json",
811
- "summary": "Path to a pre-compiled AgentJSON file to use instead of compiling the Agent Script file. Intended for internal use and testing.",
812
- "hasDynamicHelp": false,
813
- "multiple": false,
814
- "type": "option"
815
946
  }
816
947
  },
817
948
  "hasDynamicHelp": true,
818
949
  "hiddenAliases": [],
819
- "id": "agent:preview:start",
950
+ "id": "agent:preview:end",
820
951
  "pluginAlias": "@salesforce/plugin-agent",
821
952
  "pluginName": "@salesforce/plugin-agent",
822
953
  "pluginType": "core",
823
954
  "strict": true,
824
- "summary": "Start a programmatic agent preview session.",
955
+ "summary": "End an existing programmatic agent preview session and get trace location.",
825
956
  "enableJsonFlag": true,
826
957
  "requiresProject": true,
827
958
  "envVariablesSection": {
@@ -838,23 +969,19 @@
838
969
  "body": [
839
970
  {
840
971
  "name": "Succeeded (0)",
841
- "description": "Preview session started successfully."
842
- },
843
- {
844
- "name": "Failed (1)",
845
- "description": "Agent Script compilation failed (syntax errors in the script)."
972
+ "description": "Preview session ended successfully and traces saved."
846
973
  },
847
974
  {
848
975
  "name": "NotFound (2)",
849
- "description": "Agent not found, or compilation API returned HTTP 404 (endpoint may not be available in your org or region)."
976
+ "description": "Agent not found, or no preview session exists for this agent."
850
977
  },
851
978
  {
852
- "name": "ServerError (3)",
853
- "description": "Compilation API returned HTTP 500 (server error during compilation)."
979
+ "name": "PreviewEndFailed (4)",
980
+ "description": "Failed to end the preview session."
854
981
  },
855
982
  {
856
- "name": "PreviewStartFailed (4)",
857
- "description": "Preview session failed to start due to API or network errors."
983
+ "name": "SessionAmbiguous (5)",
984
+ "description": "Multiple preview sessions found; specify --session-id to choose one."
858
985
  }
859
986
  ]
860
987
  },
@@ -864,28 +991,26 @@
864
991
  "commands",
865
992
  "agent",
866
993
  "preview",
867
- "start.js"
994
+ "end.js"
868
995
  ],
869
996
  "aliasPermutations": [],
870
997
  "permutations": [
871
- "agent:preview:start",
872
- "preview:agent:start",
873
- "preview:start:agent",
874
- "agent:start:preview",
875
- "start:agent:preview",
876
- "start:preview:agent"
877
- ]
878
- },
879
- "agent:generate:agent-spec": {
998
+ "agent:preview:end",
999
+ "preview:agent:end",
1000
+ "preview:end:agent",
1001
+ "agent:end:preview",
1002
+ "end:agent:preview",
1003
+ "end:preview:agent"
1004
+ ]
1005
+ },
1006
+ "agent:preview:send": {
880
1007
  "aliases": [],
881
1008
  "args": {},
882
- "description": "An agent spec is a YAML-formatted file that contains basic information about the agent, such as its role, company description, and an AI-generated list of topics based on this information. Topics define the range of jobs your agent can handle.\n\nUse flags, such as --role and --company-description, to provide details about your company and the role that the agent plays in your company. If you prefer, you can also be prompted for the basic information; use --full-interview to be prompted for all required and optional properties. Upon command execution, the large language model (LLM) associated with your org uses the provided information to generate a list of topics for the agent. Because the LLM uses the company and role information to generate the topics, we recommend that you provide accurate, complete, and specific details so the LLM generates the best and most relevant topics. Once generated, you can edit the spec file; for example, you can remove topics that don't apply or change a topic's description.\n\nYou can also iterate the spec generation process by using the --spec flag to pass an existing agent spec file to this command, and then using the --role, --company-description, etc, flags to refine your agent properties. Iteratively improving the description of your agent allows the LLM to generate progressively better topics.\n\nYou can also specify other agent properties, such as a custom prompt template, how to ground the prompt template to add context to the agent's prompts, the tone of the prompts, and the username of a user in the org to assign to the agent.\n\nWhen your agent spec is ready, generate an authoring bundle from it by passing the spec file to the --spec flag of the \"agent generate authoring-bundle\" CLI command. An authoring bundle is a metadata type that contains an Agent Script file, which is the blueprint for an agent. (While not recommended, you can also use the agent spec file to immediately create an agent with the \"agent create\" command. We don't recommend this workflow because these types of agents don't use Agent Script, and are thus less flexible and more difficult to maintain.)",
1009
+ "description": "You must have previously started a programmatic agent preview session with the \"agent preview start\" command to then use this command to send the agent a message (utterance). This command then displays the agent's response.\n\nThe original \"agent preview start\" command outputs a session ID which you then use with the --session-id flag of this command to send a message. You don't have to specify the --session-id flag if an agent has only one active preview session. You must also use either the --authoring-bundle or --api-name flag to specify the API name of the authoring bundle or the published agent, respecitvely. To find either API name, navigate to your package directory in your DX project. The API name of an authoring bundle is the same as its directory name under the \"aiAuthoringBundles\" metadata directory. Similarly, the published agent's API name is the same as its directory name under the \"Bots\" metadata directory.",
883
1010
  "examples": [
884
- "Generate an agent spec in the default location and use flags to specify the agent properties, such as its role and your company details; use your default org:\n<%= config.bin %> <%= command.id %> --type customer --role \"Field customer complaints and manage employee schedules.\" --company-name \"Coral Cloud Resorts\" --company-description \"Provide customers with exceptional destination activities, unforgettable experiences, and reservation services.\"",
885
- "Generate an agent spec by being prompted for the required agent properties and generate a maxiumum of 5 topics; write the generated file to the \"specs/resortManagerSpec.yaml\" file and use the org with alias \"my-org\":\n<%= config.bin %> <%= command.id %> --max-topics 5 --output-file specs/resortManagerAgent.yaml --target-org my-org",
886
- "Be prompted for all required and optional agent properties; use your default org:\n<%= config.bin %> <%= command.id %> --full-interview",
887
- "Specify an existing agent spec file called \"specs/resortManagerAgent.yaml\", and then overwrite it with a new version that contains newly AI-generated topics based on the updated role information passed in with the --role flag:\n<%= config.bin %> <%= command.id %> --spec specs/resortManagerAgent.yaml --output-file specs/resortManagerAgent.yaml --role \"Field customer complaints, manage employee schedules, and ensure all resort operations are running smoothly\"",
888
- "Specify that the conversational tone of the agent is formal and to attach the \"resortmanager@myorg.com\" username to it; be prompted for the required properties and use your default org:\n<%= config.bin %> <%= command.id %> --tone formal --agent-user resortmanager@myorg.com"
1011
+ "Send a message to an activated published agent using its API name and session ID; use the default org:\n<%= config.bin %> <%= command.id %> --utterance \"What can you help me with?\" --api-name My_Published_Agent --session-id <SESSION_ID>",
1012
+ "Similar to previous example, but don't specify a session ID; you get an error if the agent has more than one active session. Use the org with alias \"my-dev-org\":\n<%= config.bin %> <%= command.id %> --utterance \"What can you help me with?\" --api-name My_Published_Agent --target-org my-dev-org",
1013
+ "Send a message to an agent using its authoring bundle API name; you get an error if the agent has more than one active session:\n<%= config.bin %> <%= command.id %> --utterance \"what can you help me with?\" --authoring-bundle My_Local_Agent"
889
1014
  ],
890
1015
  "flags": {
891
1016
  "json": {
@@ -920,164 +1045,103 @@
920
1045
  "multiple": false,
921
1046
  "type": "option"
922
1047
  },
923
- "type": {
924
- "name": "type",
925
- "summary": "Type of agent to create. Internal types are copilots used internally by your company and customer types are the agents you create for your customers.",
926
- "hasDynamicHelp": false,
927
- "multiple": false,
928
- "options": [
929
- "customer",
930
- "internal"
931
- ],
932
- "type": "option"
933
- },
934
- "role": {
935
- "name": "role",
936
- "summary": "Role of the agent.",
937
- "hasDynamicHelp": false,
938
- "multiple": false,
939
- "type": "option"
940
- },
941
- "company-name": {
942
- "name": "company-name",
943
- "summary": "Name of your company.",
944
- "hasDynamicHelp": false,
945
- "multiple": false,
946
- "type": "option"
947
- },
948
- "company-description": {
949
- "name": "company-description",
950
- "summary": "Description of your company.",
951
- "hasDynamicHelp": false,
952
- "multiple": false,
953
- "type": "option"
954
- },
955
- "company-website": {
956
- "name": "company-website",
957
- "summary": "Website URL of your company.",
958
- "hasDynamicHelp": false,
959
- "multiple": false,
960
- "type": "option"
961
- },
962
- "max-topics": {
963
- "name": "max-topics",
964
- "summary": "Maximum number of topics to generate in the agent spec; default is 5.",
965
- "hasDynamicHelp": false,
966
- "multiple": false,
967
- "type": "option"
968
- },
969
- "agent-user": {
970
- "name": "agent-user",
971
- "summary": "Username of a user in your org to assign to your agent; determines what your agent can access and do.",
972
- "hasDynamicHelp": false,
973
- "multiple": false,
974
- "type": "option"
975
- },
976
- "enrich-logs": {
977
- "name": "enrich-logs",
978
- "summary": "Adds agent conversation data to event logs so you can view all agent session activity in one place.",
979
- "hasDynamicHelp": false,
980
- "multiple": false,
981
- "options": [
982
- "true",
983
- "false"
984
- ],
985
- "type": "option"
986
- },
987
- "tone": {
988
- "name": "tone",
989
- "summary": "Conversational style of the agent, such as how it expresses your brand personality in its messages through word choice, punctuation, and sentence structure.",
990
- "hasDynamicHelp": false,
991
- "multiple": false,
992
- "options": [
993
- "formal",
994
- "casual",
995
- "neutral"
996
- ],
997
- "type": "option"
998
- },
999
- "spec": {
1000
- "name": "spec",
1001
- "summary": "Agent spec file, in YAML format, to use as input to the command.",
1048
+ "session-id": {
1049
+ "name": "session-id",
1050
+ "required": false,
1051
+ "summary": "Session ID outputted by \"agent preview start\". Not required when the agent has exactly one active session. Run \"agent preview sessions\" to see list of all sessions.",
1002
1052
  "hasDynamicHelp": false,
1003
1053
  "multiple": false,
1004
1054
  "type": "option"
1005
1055
  },
1006
- "output-file": {
1007
- "name": "output-file",
1008
- "summary": "Path for the generated YAML agent spec file; can be an absolute or relative path.",
1009
- "default": "specs/agentSpec.yaml",
1056
+ "utterance": {
1057
+ "char": "u",
1058
+ "name": "utterance",
1059
+ "required": true,
1060
+ "summary": "Utterance to send to the agent, enclosed in double quotes.",
1010
1061
  "hasDynamicHelp": false,
1011
1062
  "multiple": false,
1012
1063
  "type": "option"
1013
1064
  },
1014
- "full-interview": {
1015
- "name": "full-interview",
1016
- "summary": "Prompt for both required and optional flags.",
1017
- "allowNo": false,
1018
- "type": "boolean"
1019
- },
1020
- "prompt-template": {
1021
- "name": "prompt-template",
1022
- "summary": "API name of a customized prompt template to use instead of the default prompt template.",
1065
+ "api-name": {
1066
+ "char": "n",
1067
+ "name": "api-name",
1068
+ "summary": "API name of the activated published agent you want to preview.",
1023
1069
  "hasDynamicHelp": false,
1024
1070
  "multiple": false,
1025
1071
  "type": "option"
1026
1072
  },
1027
- "grounding-context": {
1028
- "dependsOn": [
1029
- "prompt-template"
1030
- ],
1031
- "name": "grounding-context",
1032
- "summary": "Context information and personalization that's added to your prompts when using a custom prompt template.",
1073
+ "authoring-bundle": {
1074
+ "name": "authoring-bundle",
1075
+ "summary": "API name of the authoring bundle metadata component that contains the agent's Agent Script file.",
1033
1076
  "hasDynamicHelp": false,
1034
1077
  "multiple": false,
1035
1078
  "type": "option"
1036
- },
1037
- "force-overwrite": {
1038
- "name": "force-overwrite",
1039
- "summary": "Don't prompt the user to confirm that an existing spec file will be overwritten.",
1040
- "allowNo": false,
1041
- "type": "boolean"
1042
1079
  }
1043
1080
  },
1044
1081
  "hasDynamicHelp": true,
1045
1082
  "hiddenAliases": [],
1046
- "id": "agent:generate:agent-spec",
1083
+ "id": "agent:preview:send",
1047
1084
  "pluginAlias": "@salesforce/plugin-agent",
1048
1085
  "pluginName": "@salesforce/plugin-agent",
1049
1086
  "pluginType": "core",
1050
1087
  "strict": true,
1051
- "summary": "Generate an agent spec, which is a YAML file that captures what an agent can do.",
1088
+ "summary": "Send a message to an existing agent preview session.",
1052
1089
  "enableJsonFlag": true,
1053
1090
  "requiresProject": true,
1091
+ "envVariablesSection": {
1092
+ "header": "ENVIRONMENT VARIABLES",
1093
+ "body": [
1094
+ {
1095
+ "name": "SF_TARGET_ORG",
1096
+ "description": "Username or alias of your default org. Overrides the target-org configuration variable."
1097
+ }
1098
+ ]
1099
+ },
1100
+ "errorCodes": {
1101
+ "header": "ERROR CODES",
1102
+ "body": [
1103
+ {
1104
+ "name": "Succeeded (0)",
1105
+ "description": "Message sent successfully and agent response received."
1106
+ },
1107
+ {
1108
+ "name": "NotFound (2)",
1109
+ "description": "Agent not found, or no preview session exists for this agent."
1110
+ },
1111
+ {
1112
+ "name": "PreviewSendFailed (4)",
1113
+ "description": "Failed to send message or receive response from the preview session."
1114
+ },
1115
+ {
1116
+ "name": "SessionAmbiguous (5)",
1117
+ "description": "Multiple preview sessions found; specify --session-id to choose one."
1118
+ }
1119
+ ]
1120
+ },
1054
1121
  "isESM": true,
1055
1122
  "relativePath": [
1056
1123
  "lib",
1057
1124
  "commands",
1058
1125
  "agent",
1059
- "generate",
1060
- "agent-spec.js"
1126
+ "preview",
1127
+ "send.js"
1061
1128
  ],
1062
1129
  "aliasPermutations": [],
1063
1130
  "permutations": [
1064
- "agent:generate:agent-spec",
1065
- "generate:agent:agent-spec",
1066
- "generate:agent-spec:agent",
1067
- "agent:agent-spec:generate",
1068
- "agent-spec:agent:generate",
1069
- "agent-spec:generate:agent"
1131
+ "agent:preview:send",
1132
+ "preview:agent:send",
1133
+ "preview:send:agent",
1134
+ "agent:send:preview",
1135
+ "send:agent:preview",
1136
+ "send:preview:agent"
1070
1137
  ]
1071
1138
  },
1072
- "agent:generate:authoring-bundle": {
1139
+ "agent:preview:sessions": {
1073
1140
  "aliases": [],
1074
1141
  "args": {},
1075
- "description": "Authoring bundles are metadata components that contain an agent's Agent Script file. The Agent Script file is the agent's blueprint; it fully describes what the agent can do using the Agent Script language.\n\nUse this command to generate a new authoring bundle based on an agent spec YAML file, which you create with the \"agent generate agent-spec\" command. The agent spec YAML file is a high-level description of the agent; it describes its essence rather than exactly what it can do. The resulting Agent Script file is customized to reflect what's in the agent spec file. You can also create an authoring bundle without an agent spec file by specifying the \"--no-spec\" flag; in this case, the resulting Agent Script file is just the default boilerplate.\n\nThe metadata type for authoring bundles is aiAuthoringBundle, which consist of a standard \"<bundle-api-name>.bundle-meta.xml\" metadata file and the Agent Script file (with extension \".agent\"). When you run this command, the new authoring bundle is generated in the force-app/main/default/aiAuthoringBundles/<bundle-api-name> directory. Use the --output-dir flag to generate them elsewhere.\n\nAfter you generate the initial authoring bundle, code the Agent Script file so your agent behaves exactly as you want. The Agent Script file generated by this command is just a first draft of your agent! Interactively test the agent by conversing with it using the \"agent preview\" command. Then publish the agent to your org with the \"agent publish authoring-bundle\" command.\n\nThis command requires an org because it uses it to access an LLM for generating the Agent Script file.",
1142
+ "description": "This command lists the agent preview sessions that were started with the \"agent preview start\" command and are still in the local cache. Use this command to discover specific session IDs that you can pass to the \"agent preview send\" or \"agent preview end\" commands with the --session-id flag.\n\nProgrammatic agent preview sessions can be started for both published activated agents and by using an agent's local authoring bundle, which contains its Agent Script file. In this command's output table, the Agent column contains either the API name of the authoring bundle or the published agent, whichever was used when starting the session. In the table, if the same API name has multiple rows with different session IDs, then it means that you previously started multiple preview sessions with the associated agent.",
1076
1143
  "examples": [
1077
- "Generate an authoring bundle by being prompted for all required values, such as the agent spec YAML file, the bundle name, and the API name; use your default org:\n<%= config.bin %> <%= command.id %>",
1078
- "Generate an authoring bundle without using an agent spec file; give the bundle the label \"My Authoring Bundle\" and use your default org:\n<%= config.bin %> <%= command.id %> --no-spec --name \"My Authoring Bundle\"",
1079
- "Generate an authoring bundle from the \"specs/agentSpec.yaml\" agent spec YAML file and give it the label \"My Authoring Bundle\"; use your default org:\n<%= config.bin %> <%= command.id %> --spec specs/agentSpec.yaml --name \"My Authoring Bundle\"",
1080
- "Similar to previous example, but generate the authoring bundle files in the \"other-package-dir/main/default\" package directory; use the org with alias \"my-dev-org\":\n<%= config.bin %> <%= command.id %> --spec specs/agentSpec.yaml --name \"My Authoring Bundle\" --output-dir other-package-dir/main/default --target-org my-dev-org"
1144
+ "List all cached agent preview sessions:\n<%= config.bin %> <%= command.id %>"
1081
1145
  ],
1082
1146
  "flags": {
1083
1147
  "json": {
@@ -1094,102 +1158,53 @@
1094
1158
  "hasDynamicHelp": false,
1095
1159
  "multiple": false,
1096
1160
  "type": "option"
1097
- },
1098
- "target-org": {
1099
- "char": "o",
1100
- "name": "target-org",
1101
- "noCacheDefault": true,
1102
- "required": true,
1103
- "summary": "Username or alias of the target org. Not required if the `target-org` configuration variable is already set.",
1104
- "hasDynamicHelp": true,
1105
- "multiple": false,
1106
- "type": "option"
1107
- },
1108
- "api-name": {
1109
- "name": "api-name",
1110
- "summary": "API name of the new authoring bundle; if not specified, the API name is derived from the authoring bundle name (label); the API name can't exist in the org.",
1111
- "hasDynamicHelp": false,
1112
- "multiple": false,
1113
- "type": "option"
1114
- },
1115
- "api-version": {
1116
- "description": "Override the api version used for api requests made by this command",
1117
- "name": "api-version",
1118
- "hasDynamicHelp": false,
1119
- "multiple": false,
1120
- "type": "option"
1121
- },
1122
- "spec": {
1123
- "char": "f",
1124
- "name": "spec",
1125
- "summary": "Path to the agent spec YAML file. If you don't specify the flag, the command provides a list that you can choose from. Use the --no-spec flag to skip using an agent spec entirely.",
1126
- "hasDynamicHelp": false,
1127
- "multiple": false,
1128
- "type": "option"
1129
- },
1130
- "no-spec": {
1131
- "name": "no-spec",
1132
- "summary": "Skip prompting for an agent spec and use the default Agent Script boilerplate in the generated authoring bundle.",
1133
- "allowNo": false,
1134
- "type": "boolean"
1135
- },
1136
- "output-dir": {
1137
- "char": "d",
1138
- "name": "output-dir",
1139
- "summary": "Directory where the authoring bundle files are generated.",
1140
- "hasDynamicHelp": false,
1141
- "multiple": false,
1142
- "type": "option"
1143
- },
1144
- "name": {
1145
- "char": "n",
1146
- "name": "name",
1147
- "summary": "Name (label) of the authoring bundle; if not specified, you're prompted for the name.",
1148
- "hasDynamicHelp": false,
1149
- "multiple": false,
1150
- "type": "option"
1151
- },
1152
- "force-overwrite": {
1153
- "name": "force-overwrite",
1154
- "summary": "Overwrite the existing authoring bundle if one with the same API name already exists locally.",
1155
- "allowNo": false,
1156
- "type": "boolean"
1157
1161
  }
1158
1162
  },
1159
- "hasDynamicHelp": true,
1163
+ "hasDynamicHelp": false,
1160
1164
  "hiddenAliases": [],
1161
- "id": "agent:generate:authoring-bundle",
1165
+ "id": "agent:preview:sessions",
1162
1166
  "pluginAlias": "@salesforce/plugin-agent",
1163
1167
  "pluginName": "@salesforce/plugin-agent",
1164
1168
  "pluginType": "core",
1165
1169
  "strict": true,
1166
- "summary": "Generate an authoring bundle from an existing agent spec YAML file.",
1170
+ "summary": "List all known programmatic agent preview sessions.",
1167
1171
  "enableJsonFlag": true,
1168
1172
  "requiresProject": true,
1173
+ "errorCodes": {
1174
+ "header": "ERROR CODES",
1175
+ "body": [
1176
+ {
1177
+ "name": "Succeeded (0)",
1178
+ "description": "Sessions listed successfully (or empty list if no active sessions)."
1179
+ }
1180
+ ]
1181
+ },
1169
1182
  "isESM": true,
1170
1183
  "relativePath": [
1171
1184
  "lib",
1172
1185
  "commands",
1173
1186
  "agent",
1174
- "generate",
1175
- "authoring-bundle.js"
1187
+ "preview",
1188
+ "sessions.js"
1176
1189
  ],
1177
1190
  "aliasPermutations": [],
1178
1191
  "permutations": [
1179
- "agent:generate:authoring-bundle",
1180
- "generate:agent:authoring-bundle",
1181
- "generate:authoring-bundle:agent",
1182
- "agent:authoring-bundle:generate",
1183
- "authoring-bundle:agent:generate",
1184
- "authoring-bundle:generate:agent"
1192
+ "agent:preview:sessions",
1193
+ "preview:agent:sessions",
1194
+ "preview:sessions:agent",
1195
+ "agent:sessions:preview",
1196
+ "sessions:agent:preview",
1197
+ "sessions:preview:agent"
1185
1198
  ]
1186
1199
  },
1187
- "agent:generate:template": {
1200
+ "agent:preview:start": {
1188
1201
  "aliases": [],
1189
1202
  "args": {},
1190
- "description": "WARNING: This command doesn't work for agents that were created from an Agent Script file. In other words, you can't currently package an agent template for agents that use Agent Script.\n\nAt a high-level, agents are defined by the Bot, BotVersion, and GenAiPlannerBundle metadata types. The GenAiPlannerBundle type in turn defines the agent's topics and actions. This command uses the metadata files for these three types, located in your local DX project, to generate a BotTemplate metadata file for a specific agent (Bot). You then use the BotTemplate metadata file, along with the GenAiPlannerBundle metadata file that references the BotTemplate, to package the template in a managed package that you can share between orgs or on AppExchange.\n\nUse the --agent-file flag to specify the relative or full pathname of the Bot metadata file, such as force-app/main/default/bots/My_Awesome_Agent/My_Awesome_Agent.bot-meta.xml. A single Bot can have multiple BotVersions, so use the --agent-version flag to specify the version. The corresponding BotVersion metadata file must exist locally. For example, if you specify \"--agent-version 4\", then the file force-app/main/default/bots/My_Awesome_Agent/v4.botVersion-meta.xml must exist.\n\nThe new BotTemplate metadata file is generated in the \"botTemplates\" directory in the output directory specified with the --output-dir flag, and has the name <Agent_API_name>\\_v<Version>\\_Template.botTemplate-meta.xml, such as my-package/botTemplates/My_Awesome_Agent_v4_Template.botTemplate-meta.xml. The command displays the full pathname of the generated files when it completes.\n\nSee \"Develop and Package Agent Templates Using Scratch Orgs\" (https://developer.salesforce.com/docs/atlas.en-us.pkg2_dev.meta/pkg2_dev/dev2gp_package_agent_templates.htm) for details about the complete process, which includes using a scratch org to create and test the agent, retrieving the agent metadata to your DX project, running this command to create the agent template, and then packaging the template.",
1203
+ "description": "This command outputs a session ID that you then use with the \"agent preview send\" command to send an utterance to the agent. Use the \"agent preview sessions\" command to list all active sessions and the \"agent preview end\" command to end a specific session.\n\nIdentify the agent you want to start previewing with either the --authoring-bundle flag to specify a local authoring bundle's API name or --api-name to specify an activated published agent's API name. To find either API name, navigate to your package directory in your DX project. The API name of an authoring bundle is the same as its directory name under the \"aiAuthoringBundles\" metadata directory. Similarly, the published agent's API name is the same as its directory name under the \"Bots\" metadata directory.\n\nWhen starting a preview session with --authoring-bundle, you must explicitly specify the execution mode using one of these flags:\n\n- --use-live-actions: Executes real Apex classes, flows, and other actions in the org. This surfaces compile and validation errors during preview.\n- --simulate-actions: Uses AI to simulate action execution without calling real implementations.\n\nPublished agents (--api-name) always use live actions. The mode flags are optional and have no effect for published agents.",
1191
1204
  "examples": [
1192
- "Generate an agent template from the My_Awesome_Agent Bot metadata file in your DX project and save the BotTemplate and GenAiPlannerBundle to the specified directory; use version 1 of the agent. The agent that the template is based on is in the org with alias \"my-scratch-org\":\n<%= config.bin %> <%= command.id %> --agent-file force-app/main/default/bots/My_Awesome_Agent/My_Awesome_Agent.bot-meta.xml --agent-version 1 --output-dir my-package --source-org my-scratch-org"
1205
+ "Start a programmatic agent preview session by specifying an authoring bundle; use simulated actions. Use the org with alias \"my-dev-org\":\n<%= config.bin %> <%= command.id %> --authoring-bundle My_Agent_Bundle --target-org my-dev-org --simulate-actions",
1206
+ "Similar to previous example but use live actions and the default org:\n<%= config.bin %> <%= command.id %> --authoring-bundle My_Agent_Bundle --use-live-actions",
1207
+ "Start a preview session with an activated published agent (always uses live actions):\n<%= config.bin %> <%= command.id %> --api-name My_Published_Agent"
1193
1208
  ],
1194
1209
  "flags": {
1195
1210
  "json": {
@@ -1207,143 +1222,128 @@
1207
1222
  "multiple": false,
1208
1223
  "type": "option"
1209
1224
  },
1210
- "api-version": {
1211
- "description": "Override the api version used for api requests made by this command",
1212
- "name": "api-version",
1213
- "hasDynamicHelp": false,
1214
- "multiple": false,
1215
- "type": "option"
1216
- },
1217
- "source-org": {
1218
- "char": "s",
1219
- "name": "source-org",
1225
+ "target-org": {
1226
+ "char": "o",
1227
+ "name": "target-org",
1220
1228
  "noCacheDefault": true,
1221
1229
  "required": true,
1222
- "summary": "Username or alias of the namespaced scratch org that contains the agent which this template is based on.",
1230
+ "summary": "Username or alias of the target org. Not required if the `target-org` configuration variable is already set.",
1223
1231
  "hasDynamicHelp": true,
1224
1232
  "multiple": false,
1225
1233
  "type": "option"
1226
1234
  },
1227
- "agent-version": {
1228
- "name": "agent-version",
1229
- "required": true,
1230
- "summary": "Version of the agent (BotVersion).",
1235
+ "api-version": {
1236
+ "description": "Override the api version used for api requests made by this command",
1237
+ "name": "api-version",
1231
1238
  "hasDynamicHelp": false,
1232
1239
  "multiple": false,
1233
1240
  "type": "option"
1234
1241
  },
1235
- "agent-file": {
1236
- "char": "f",
1237
- "name": "agent-file",
1238
- "required": true,
1239
- "summary": "Path to an agent (Bot) metadata file.",
1242
+ "api-name": {
1243
+ "char": "n",
1244
+ "name": "api-name",
1245
+ "summary": "API name of the activated published agent you want to preview.",
1240
1246
  "hasDynamicHelp": false,
1241
1247
  "multiple": false,
1242
1248
  "type": "option"
1243
1249
  },
1244
- "output-dir": {
1245
- "char": "r",
1246
- "name": "output-dir",
1247
- "summary": "Directory where the generated BotTemplate and GenAiPlannerBundle files are saved.",
1248
- "hasDynamicHelp": false,
1249
- "multiple": false,
1250
- "type": "option"
1251
- }
1252
- },
1253
- "hasDynamicHelp": true,
1254
- "hiddenAliases": [],
1255
- "id": "agent:generate:template",
1256
- "pluginAlias": "@salesforce/plugin-agent",
1257
- "pluginName": "@salesforce/plugin-agent",
1258
- "pluginType": "core",
1259
- "strict": true,
1260
- "summary": "Generate an agent template from an existing agent in your DX project so you can then package the template in a second-generation managed package.",
1261
- "enableJsonFlag": true,
1262
- "requiresProject": true,
1263
- "isESM": true,
1264
- "relativePath": [
1265
- "lib",
1266
- "commands",
1267
- "agent",
1268
- "generate",
1269
- "template.js"
1270
- ],
1271
- "aliasPermutations": [],
1272
- "permutations": [
1273
- "agent:generate:template",
1274
- "generate:agent:template",
1275
- "generate:template:agent",
1276
- "agent:template:generate",
1277
- "template:agent:generate",
1278
- "template:generate:agent"
1279
- ]
1280
- },
1281
- "agent:generate:test-spec": {
1282
- "aliases": [],
1283
- "args": {},
1284
- "description": "The first step when using Salesforce CLI to create an agent test in your org is to use this interactive command to generate a local YAML-formatted test spec file. The test spec YAML file contains information about the agent being tested, such as its API name, and then one or more test cases. This command uses the metadata components in your DX project when prompting for information, such as the agent API name; it doesn't look in your org.\n\nTo generate a specific agent test case, this command prompts you for this information; when possible, the command provides a list of options for you to choose from:\n\n- Utterance: Natural language statement, question, or command used to test the agent.\n- Expected topic: API name of the topic you expect the agent to use when responding to the utterance.\n- Expected actions: One or more API names of the expection actions the agent takes.\n- Expected outcome: Natural language description of the outcome you expect.\n- (Optional) Custom evaluation: Test an agent's response for specific strings or numbers.\n- (Optional) Conversation history: Boilerplate for additional context you can add to the test in the form of a conversation history.\n\nYou can manually add contextVariables to test cases in the generated YAML file to inject contextual data (such as CaseId or RoutableId) into agent sessions. This is useful for testing agent behavior with different contextual information.\n\nWhen your test spec is ready, you then run the \"agent test create\" command to actually create the test in your org and synchronize the metadata with your DX project. The metadata type for an agent test is AiEvaluationDefinition.\n\nIf you have an existing AiEvaluationDefinition metadata XML file in your DX project, you can generate its equivalent YAML test spec file with the --from-definition flag.",
1285
- "examples": [
1286
- "Generate an agent test spec YAML file interactively:\n<%= config.bin %> <%= command.id %>",
1287
- "Generate an agent test spec YAML file and specify a name for the new file; if the file exists, overwrite it without confirmation:\n<%= config.bin %> <%= command.id %> --output-file specs/Resort_Manager-new-version-testSpec.yaml --force-overwrite",
1288
- "Generate an agent test spec YAML file from an existing AiEvaluationDefinition metadata XML file in your DX project:\n<%= config.bin %> <%= command.id %> --from-definition force-app//main/default/aiEvaluationDefinitions/Resort_Manager_Tests.aiEvaluationDefinition-meta.xml"
1289
- ],
1290
- "flags": {
1291
- "flags-dir": {
1292
- "helpGroup": "GLOBAL",
1293
- "name": "flags-dir",
1294
- "summary": "Import flag values from a directory.",
1250
+ "authoring-bundle": {
1251
+ "name": "authoring-bundle",
1252
+ "summary": "API name of the authoring bundle metadata component that contains the agent's Agent Script file.",
1295
1253
  "hasDynamicHelp": false,
1296
1254
  "multiple": false,
1297
1255
  "type": "option"
1298
1256
  },
1299
- "from-definition": {
1300
- "char": "d",
1301
- "name": "from-definition",
1302
- "summary": "Filepath to the AIEvaluationDefinition metadata XML file in your DX project that you want to convert to a test spec YAML file.",
1303
- "hasDynamicHelp": false,
1304
- "multiple": false,
1305
- "type": "option"
1257
+ "use-live-actions": {
1258
+ "exclusive": [
1259
+ "simulate-actions"
1260
+ ],
1261
+ "name": "use-live-actions",
1262
+ "summary": "Execute real actions in the org (Apex classes, flows, etc.). Required with --authoring-bundle.",
1263
+ "allowNo": false,
1264
+ "type": "boolean"
1306
1265
  },
1307
- "force-overwrite": {
1308
- "name": "force-overwrite",
1309
- "summary": "Don't prompt for confirmation when overwriting an existing test spec YAML file.",
1266
+ "simulate-actions": {
1267
+ "exclusive": [
1268
+ "use-live-actions"
1269
+ ],
1270
+ "name": "simulate-actions",
1271
+ "summary": "Use AI to simulate action execution instead of calling real actions. Required with --authoring-bundle.",
1310
1272
  "allowNo": false,
1311
1273
  "type": "boolean"
1312
1274
  },
1313
- "output-file": {
1314
- "char": "f",
1315
- "name": "output-file",
1316
- "summary": "Name of the generated test spec YAML file. Default value is \"specs/<AGENT_API_NAME>-testSpec.yaml\".",
1275
+ "agent-json": {
1276
+ "dependsOn": [
1277
+ "authoring-bundle"
1278
+ ],
1279
+ "hidden": true,
1280
+ "name": "agent-json",
1281
+ "summary": "Path to a pre-compiled AgentJSON file to use instead of compiling the Agent Script file. Intended for internal use and testing.",
1317
1282
  "hasDynamicHelp": false,
1318
1283
  "multiple": false,
1319
1284
  "type": "option"
1320
1285
  }
1321
1286
  },
1322
- "hasDynamicHelp": false,
1287
+ "hasDynamicHelp": true,
1323
1288
  "hiddenAliases": [],
1324
- "id": "agent:generate:test-spec",
1289
+ "id": "agent:preview:start",
1325
1290
  "pluginAlias": "@salesforce/plugin-agent",
1326
1291
  "pluginName": "@salesforce/plugin-agent",
1327
1292
  "pluginType": "core",
1328
1293
  "strict": true,
1329
- "summary": "Generate an agent test spec, which is a YAML file that lists the test cases for testing a specific agent.",
1330
- "enableJsonFlag": false,
1294
+ "summary": "Start a programmatic agent preview session.",
1295
+ "enableJsonFlag": true,
1296
+ "requiresProject": true,
1297
+ "envVariablesSection": {
1298
+ "header": "ENVIRONMENT VARIABLES",
1299
+ "body": [
1300
+ {
1301
+ "name": "SF_TARGET_ORG",
1302
+ "description": "Username or alias of your default org. Overrides the target-org configuration variable."
1303
+ }
1304
+ ]
1305
+ },
1306
+ "errorCodes": {
1307
+ "header": "ERROR CODES",
1308
+ "body": [
1309
+ {
1310
+ "name": "Succeeded (0)",
1311
+ "description": "Preview session started successfully."
1312
+ },
1313
+ {
1314
+ "name": "Failed (1)",
1315
+ "description": "Agent Script compilation failed (syntax errors in the script)."
1316
+ },
1317
+ {
1318
+ "name": "NotFound (2)",
1319
+ "description": "Agent not found, or compilation API returned HTTP 404 (endpoint may not be available in your org or region)."
1320
+ },
1321
+ {
1322
+ "name": "ServerError (3)",
1323
+ "description": "Compilation API returned HTTP 500 (server error during compilation)."
1324
+ },
1325
+ {
1326
+ "name": "PreviewStartFailed (4)",
1327
+ "description": "Preview session failed to start due to API or network errors."
1328
+ }
1329
+ ]
1330
+ },
1331
1331
  "isESM": true,
1332
1332
  "relativePath": [
1333
1333
  "lib",
1334
1334
  "commands",
1335
1335
  "agent",
1336
- "generate",
1337
- "test-spec.js"
1336
+ "preview",
1337
+ "start.js"
1338
1338
  ],
1339
1339
  "aliasPermutations": [],
1340
1340
  "permutations": [
1341
- "agent:generate:test-spec",
1342
- "generate:agent:test-spec",
1343
- "generate:test-spec:agent",
1344
- "agent:test-spec:generate",
1345
- "test-spec:agent:generate",
1346
- "test-spec:generate:agent"
1341
+ "agent:preview:start",
1342
+ "preview:agent:start",
1343
+ "preview:start:agent",
1344
+ "agent:start:preview",
1345
+ "start:agent:preview",
1346
+ "start:preview:agent"
1347
1347
  ]
1348
1348
  },
1349
1349
  "agent:publish:authoring-bundle": {
@@ -2708,5 +2708,5 @@
2708
2708
  ]
2709
2709
  }
2710
2710
  },
2711
- "version": "1.38.0"
2711
+ "version": "1.38.1"
2712
2712
  }