@servicenow/sdk - v4.7.0
    Preparing search index...

    Interface ToolGraphBuilder<TSkillInputs>

    Tool graph builder interface providing type-safe tool creation methods Generic over skill inputs to enable input field autocomplete

    interface ToolGraphBuilder<TSkillInputs extends readonly InputAttribute[]> {
        input: { readonly [K in string]: SkillInputRef<K> };
        Decision<
            TName extends string,
            TTarget extends string,
            TDeps extends readonly BaseToolHandle[] = [],
        >(
            name: TName,
            config: WithID<
                {
                    branches: (
                        targets: { [K in string]: K },
                    ) => DecisionBranch<TTarget>[];
                    condition?: ToolCondition;
                    default: (targets: { [K in string]: K }) => TTarget;
                    depends?: TDeps;
                    targets: readonly TTarget[];
                },
            >,
        ): ToolHandle<TName, readonly []>;
        FlowAction<
            TName extends string,
            TOutputNames extends readonly string[] = readonly string[],
        >(
            name: TName,
            config: WithID<
                {
                    $capabilityId: ExplicitKey;
                    actionId: any;
                    condition?: ToolCondition;
                    depends?: ToolDependency[];
                    inputs?: FlowActionToolInput[];
                    outputs?: FlowActionToolOutput[];
                },
            >,
        ): ToolHandle<TName, TOutputNames>;
        InlineScript<TName extends string>(
            name: TName,
            config: WithID<
                {
                    condition?: ToolCondition;
                    depends?: ToolDependency[];
                    script: string;
                    truncate?: boolean;
                },
            >,
        ): ToolHandle<TName, readonly ["output"]>;
        Script<TName extends string>(
            name: TName,
            config: WithID<
                {
                    $capabilityId: ExplicitKey;
                    condition?: ToolCondition;
                    depends?: ToolDependency[];
                    inputs?: ScriptToolInput[];
                    output?: ScriptToolOutput;
                    scriptFunctionName?: string;
                    scriptId: string
                    | ScriptIncludeOptions
                    | Record<"sys_script_include">;
                    truncate?: boolean;
                },
            >,
        ): ToolHandle<TName, readonly ["output"]>;
        Skill<TName extends string>(
            name: TName,
            config: WithID<
                {
                    condition?: ToolCondition;
                    depends?: ToolDependency[];
                    inputs?: SkillToolInput[];
                    outputs: SkillToolOutputs;
                    skillId: | string
                    | [
                        SkillDefinitionWithID<
                            readonly InputAttribute<keyof Tables>[],
                            Record<string, BaseToolHandle>,
                        >,
                        SkillPromptConfig<
                            readonly InputAttribute<keyof Tables>[],
                            Record<string, BaseToolHandle>,
                        >,
                    ]
                    | Record<"sys_one_extend_capability">;
                },
            >,
        ): ToolHandle<
            TName,
            readonly ["provider", "response", "error", "errorcode", "status"],
        >;
        Subflow<
            TName extends string,
            TOutputNames extends readonly string[] = readonly string[],
        >(
            name: TName,
            config: WithID<
                {
                    $capabilityId: ExplicitKey;
                    condition?: ToolCondition;
                    depends?: ToolDependency[];
                    inputs?: SubflowToolInput[];
                    outputs?: SubflowToolOutput[];
                    subflowId: string
                    | Subflow<FlowIOType<any>, OutputsWithDotwalk<any>>;
                    truncate?: boolean;
                },
            >,
        ): ToolHandle<TName, TOutputNames>;
        WebSearch<TName extends string>(
            name: TName,
            config: WithID<
                (WebSearchAiAnswersConfig | WebSearchScrapingConfig) & {
                    condition?: ToolCondition | undefined;
                    depends?: ToolDependency[];
                    truncate?: FixedOutputTruncateConfig;
                },
            >,
        ): ToolHandle<
            TName,
            readonly ["provider", "response", "error", "errorcode", "status"],
        >;
    }

    Type Parameters

    Index

    Properties

    input: { readonly [K in string]: SkillInputRef<K> }

    Proxy object providing access to skill input fields Returns template strings like "{{input.fieldName}}" Type returns SkillInputRef which is:

    • Assignable to string (for tool inputs and prompts)
    • Accepted by DecisionCondition.field (branded type)

    Methods

    • Create a Decision node for conditional branching

      Type-safe features:

      • targets: Array of target tool names (IntelliSense works automatically)
      • branches.to: Constrained to values from targets array
      • branches.condition.field: Accepts t.input.* (string) or tool.output (ToolOutputRef)
      • default: Constrained to values from targets array

      Type Parameters

      • TName extends string
      • TTarget extends string
      • TDeps extends readonly BaseToolHandle[] = []

      Parameters

      • name: TName

        Unique decision node name

      • config: WithID<
            {
                branches: (targets: { [K in string]: K }) => DecisionBranch<TTarget>[];
                condition?: ToolCondition;
                default: (targets: { [K in string]: K }) => TTarget;
                depends?: TDeps;
                targets: readonly TTarget[];
            },
        >

        Decision configuration with targets, branches, and default path

      Returns ToolHandle<TName, readonly []>

      const decision = t.Decision('Router', {
      $id: Now.ID['my_skill_router_decision'],
      depends: [previousTool],
      targets: ['PathA', 'PathB', 'PathC'],
      branches: (targets) => [
      {
      name: 'High Priority',
      to: targets.PathA, // IntelliSense: 'PathA' | 'PathB' | 'PathC'
      condition: {
      field: t.input.priority, // Skill input reference
      operator: 'is',
      value: '1'
      }
      },
      {
      name: 'Tool Output Check',
      to: targets.PathB,
      condition: {
      field: previousTool.output, // Tool output reference
      operator: 'contains',
      value: 'error'
      }
      }
      ],
      default: (targets) => targets.PathC // Type-safe default
      })
    • Create a Flow Action tool Note: Inputs and outputs are DYNAMIC - they vary per flow action

      Type Parameters

      • TName extends string
      • TOutputNames extends readonly string[] = readonly string[]

      Parameters

      Returns ToolHandle<TName, TOutputNames>

    • Create an InlineScript tool Note: InlineScript has NO inputs, single output accessed via tool.output Platform reference: {{toolName.output}}

      Type Parameters

      • TName extends string

      Parameters

      • name: TName

        Unique tool name

      • config: WithID<
            {
                condition?: ToolCondition;
                depends?: ToolDependency[];
                script: string;
                truncate?: boolean;
            },
        >

        Tool configuration with script and dependencies

      Returns ToolHandle<TName, readonly ["output"]>

    • Create a Script tool (Script Include / External Script) Note: Input type is always 'string', single output accessed via tool.output Platform reference: {{toolName.output}}

      Type Parameters

      • TName extends string

      Parameters

      • name: TName

        Unique tool name

      • config: WithID<
            {
                $capabilityId: ExplicitKey;
                condition?: ToolCondition;
                depends?: ToolDependency[];
                inputs?: ScriptToolInput[];
                output?: ScriptToolOutput;
                scriptFunctionName?: string;
                scriptId: string
                | ScriptIncludeOptions
                | Record<"sys_script_include">;
                truncate?: boolean;
            },
        >

        Tool configuration with scriptId, inputs, and dependencies

      Returns ToolHandle<TName, readonly ["output"]>

    • Create a Skill-as-Tool Note: Input type is always 'string', Outputs have FIXED base + optional custom outputs

      Type Parameters

      • TName extends string

      Parameters

      Returns ToolHandle<
          TName,
          readonly ["provider", "response", "error", "errorcode", "status"],
      >

    • Create a WebSearch tool Note: Inputs are FIXED (two variants), Outputs are FIXED: provider, response, error, errorcode, status

      Type Parameters

      • TName extends string

      Parameters

      Returns ToolHandle<
          TName,
          readonly ["provider", "response", "error", "errorcode", "status"],
      >