Path: blob/main/extensions/copilot/src/extension/prompts/node/devcontainer/devContainerConfigPrompt.tsx
13404 views
/*---------------------------------------------------------------------------------------------1* Copyright (c) Microsoft Corporation. All rights reserved.2* Licensed under the MIT License. See License.txt in the project root for license information.3*--------------------------------------------------------------------------------------------*/4import { BasePromptElementProps, PromptElement, SystemMessage, UserMessage } from '@vscode/prompt-tsx';5import { DevContainerConfigFeature, DevContainerConfigTemplate } from '../../../../platform/devcontainer/common/devContainerConfigurationService';6import { SafetyRules } from '../base/safetyRules';78export interface DevContainerConfigPromptProps extends BasePromptElementProps {9readonly filenames: string[];10readonly templates: DevContainerConfigTemplate[];11readonly features: DevContainerConfigFeature[];12}1314export class DevContainerConfigPrompt extends PromptElement<DevContainerConfigPromptProps> {15render() {16return (17<>18<SystemMessage>19<DevContainerConfigSystemRules />20<SafetyRules />21</SystemMessage>22<UserMessage>23<DevContainerConfigUserMessage templates={this.props.templates} features={this.props.features} filenames={this.props.filenames} />24</UserMessage>25</>26);27}28}2930class DevContainerConfigSystemRules extends PromptElement {31render() {32return (33<>34You are an AI programming assistant.<br />35You are helping a software developer to configure a Dev Container by picking a configuration template and features.36</>37);38}39}4041export interface DevContainerConfigUserMessageProps extends BasePromptElementProps {42readonly templates: DevContainerConfigTemplate[];43readonly features: DevContainerConfigFeature[];44readonly filenames: string[];45}4647class DevContainerConfigUserMessage extends PromptElement<DevContainerConfigUserMessageProps> {48render() {49return (50<>51This is a partial list of workspace files:<br />52{this.props.filenames.map(f => `- ${f}\n`).join('')}53<br />54Based on the workspace files, please suggest the best template from the list of templates below.<br />55First identify the relevant files ignoring common files, then pick the best template and reply with the best template's id.<br />56This is the list of available templates:<br />57{this.props.templates.map(t => `- ${t.id}: ${t.name || t.id}: ${t.description || t.name || t.id}\n`).join('')}58<br />59Also based on the workspace files, please suggest all relevant features from the list of features below.<br />60First identify the relevant files ignoring common files, then pick all relevant features and reply with the relevant features' ids.<br />61This is the list of available features:<br />62{this.props.features.map(f => `- ${f.id}: ${f.name || f.id}: ${f.description || f.name || f.id}\n`).join('')}63<br />64</>65);66}67}686970