diff --git a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/botProjectFile.test.tsx b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/botProjectFile.test.tsx index 678d906e3d..8d24ddeb21 100644 --- a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/botProjectFile.test.tsx +++ b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/botProjectFile.test.tsx @@ -87,7 +87,6 @@ describe('Bot Project File dispatcher', () => { content: { $schema: '', name: 'TesterBot', - workspace: 'file:///Users/tester/Desktop/LoadedBotProject/TesterBot', skills: {}, }, }, @@ -99,6 +98,10 @@ describe('Bot Project File dispatcher', () => { }, }, { recoilState: botProjectIdsState, initialValue: [rootBotProjectId] }, + { + recoilState: locationState(rootBotProjectId), + initialValue: '/Users/tester/Desktop/LoadedBotProject/RootBot', + }, ], dispatcher: { recoilState: dispatcherState, @@ -115,7 +118,7 @@ describe('Bot Project File dispatcher', () => { it('should add a local skill to bot project file', async () => { await act(async () => { renderedComponent.current.setSkillsData({ - location: 'Users/tester/Desktop/LoadedBotProject/Todo-Skill', + location: '/Users/tester/Desktop/LoadedBotProject/Todo-Skill', botNameIdentifier: 'todoSkill', }); }); @@ -124,9 +127,7 @@ describe('Bot Project File dispatcher', () => { dispatcher.addLocalSkillToBotProjectFile(testSkillId); }); - expect(renderedComponent.current.botProjectFile.content.skills.todoSkill.workspace).toBe( - 'file:///Users/tester/Desktop/LoadedBotProject/Todo-Skill' - ); + expect(renderedComponent.current.botProjectFile.content.skills.todoSkill.workspace).toBe('../Todo-Skill'); expect(renderedComponent.current.botProjectFile.content.skills.todoSkill.remote).toBeFalsy(); }); diff --git a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/project.test.tsx b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/project.test.tsx index b29387b55a..11941d6515 100644 --- a/Composer/packages/client/src/recoilModel/dispatchers/__tests__/project.test.tsx +++ b/Composer/packages/client/src/recoilModel/dispatchers/__tests__/project.test.tsx @@ -363,7 +363,7 @@ describe('Project dispatcher', () => { expect(renderedComponent.current.botStates.echoSkill2.botDisplayName).toBe('Echo-Skill-2'); await act(async () => { - await dispatcher.addRemoteSkillToBotProject('https://test.net/api/manifest/man', 'test-skill', 'remote'); + await dispatcher.addRemoteSkillToBotProject('https://test.net/api/manifest/test', 'remote'); }); expect(navigateTo).toHaveBeenLastCalledWith(`/bot/${projectId}/dialogs/emptybot-1`); @@ -392,14 +392,12 @@ describe('Project dispatcher', () => { await act(async () => { await dispatcher.addRemoteSkillToBotProject( 'https://test-dev.azurewebsites.net/manifests/onenote-2-1-preview-1-manifest.json', - 'one-note', 'remote' ); }); - - expect(renderedComponent.current.botStates.oneNote).toBeDefined(); - expect(renderedComponent.current.botStates.oneNote.botDisplayName).toBe('OneNoteSync'); - expect(renderedComponent.current.botStates.oneNote.location).toBe( + expect(renderedComponent.current.botStates.oneNoteSync).toBeDefined(); + expect(renderedComponent.current.botStates.oneNoteSync.botDisplayName).toBe('OneNoteSync'); + expect(renderedComponent.current.botStates.oneNoteSync.location).toBe( 'https://test-dev.azurewebsites.net/manifests/onenote-2-1-preview-1-manifest.json' ); expect(navigateTo).toHaveBeenLastCalledWith(`/bot/${projectId}/dialogs/emptybot-1`); @@ -429,26 +427,17 @@ describe('Project dispatcher', () => { await act(async () => { await dispatcher.addRemoteSkillToBotProject( 'https://test-dev.azurewebsites.net/manifests/onenote-2-1-preview-1-manifest.json', - 'one-note', - 'remote' - ); - }); - - await act(async () => { - await dispatcher.addRemoteSkillToBotProject( - 'https://test-dev.azurewebsites.net/manifests/onenote-second-manifest.json', - 'one-note-2', 'remote' ); }); - const oneNoteProjectId = renderedComponent.current.botStates.oneNote.projectId; + const oneNoteProjectId = renderedComponent.current.botStates.oneNoteSync.projectId; mockImplementation.mockClear(); await act(async () => { dispatcher.removeSkillFromBotProject(oneNoteProjectId); }); - expect(renderedComponent.current.botStates.oneNote).toBeUndefined(); + expect(renderedComponent.current.botStates.oneNoteSync).toBeUndefined(); }); it('should be able to add a new skill to Botproject', async () => { diff --git a/Composer/packages/client/src/recoilModel/dispatchers/botProjectFile.ts b/Composer/packages/client/src/recoilModel/dispatchers/botProjectFile.ts index ad523b1498..cb0e937d8e 100644 --- a/Composer/packages/client/src/recoilModel/dispatchers/botProjectFile.ts +++ b/Composer/packages/client/src/recoilModel/dispatchers/botProjectFile.ts @@ -2,44 +2,45 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. +import path from 'path'; + import { CallbackInterface, useRecoilCallback } from 'recoil'; import { produce } from 'immer'; -import { BotProjectSpaceSkill, convertAbsolutePathToFileProtocol } from '@bfc/shared'; +import { BotProjectSpaceSkill } from '@bfc/shared'; import { botNameIdentifierState, botProjectFileState, locationState } from '../atoms'; import { rootBotProjectIdSelector } from '../selectors'; export const botProjectFileDispatcher = () => { - const addLocalSkillToBotProjectFile = useRecoilCallback( - ({ set, snapshot }: CallbackInterface) => async (skillId: string) => { - const rootBotProjectId = await snapshot.getPromise(rootBotProjectIdSelector); - if (!rootBotProjectId) { - return; - } - const skillLocation = await snapshot.getPromise(locationState(skillId)); - const botName = await snapshot.getPromise(botNameIdentifierState(skillId)); + const addLocalSkill = useRecoilCallback(({ set, snapshot }: CallbackInterface) => async (skillId: string) => { + const rootBotProjectId = await snapshot.getPromise(rootBotProjectIdSelector); + if (!rootBotProjectId) { + return; + } + const rootBotLocation = await snapshot.getPromise(locationState(rootBotProjectId)); + const skillLocation = await snapshot.getPromise(locationState(skillId)); + const botName = await snapshot.getPromise(botNameIdentifierState(skillId)); - set(botProjectFileState(rootBotProjectId), (current) => { - const result = produce(current, (draftState) => { - const skill: BotProjectSpaceSkill = { - workspace: convertAbsolutePathToFileProtocol(skillLocation), - remote: false, - }; - draftState.content.skills[botName] = skill; - }); - return result; + set(botProjectFileState(rootBotProjectId), (current) => { + const result = produce(current, (draftState) => { + const relativePath = path.relative(rootBotLocation, skillLocation); + const skill: BotProjectSpaceSkill = { + workspace: relativePath, + remote: false, + }; + draftState.content.skills[botName] = skill; }); - } - ); + return result; + }); + }); - const addRemoteSkillToBotProjectFile = useRecoilCallback( + const addRemoteSkill = useRecoilCallback( ({ set, snapshot }: CallbackInterface) => async (skillId: string, manifestUrl: string, endpointName: string) => { const rootBotProjectId = await snapshot.getPromise(rootBotProjectIdSelector); if (!rootBotProjectId) { return; } const botName = await snapshot.getPromise(botNameIdentifierState(skillId)); - set(botProjectFileState(rootBotProjectId), (current) => { const result = produce(current, (draftState) => { const skill: BotProjectSpaceSkill = { @@ -55,26 +56,24 @@ export const botProjectFileDispatcher = () => { } ); - const removeSkillFromBotProjectFile = useRecoilCallback( - ({ set, snapshot }: CallbackInterface) => async (skillId: string) => { - const rootBotProjectId = await snapshot.getPromise(rootBotProjectIdSelector); - if (!rootBotProjectId) { - return; - } + const removeSkill = useRecoilCallback(({ set, snapshot }: CallbackInterface) => async (skillId: string) => { + const rootBotProjectId = await snapshot.getPromise(rootBotProjectIdSelector); + if (!rootBotProjectId) { + return; + } - const botName = await snapshot.getPromise(botNameIdentifierState(skillId)); - set(botProjectFileState(rootBotProjectId), (current) => { - const result = produce(current, (draftState) => { - delete draftState.content.skills[botName]; - }); - return result; + const botName = await snapshot.getPromise(botNameIdentifierState(skillId)); + set(botProjectFileState(rootBotProjectId), (current) => { + const result = produce(current, (draftState) => { + delete draftState.content.skills[botName]; }); - } - ); + return result; + }); + }); return { - addLocalSkillToBotProjectFile, - removeSkillFromBotProjectFile, - addRemoteSkillToBotProjectFile, + addLocalSkillToBotProjectFile: addLocalSkill, + removeSkillFromBotProjectFile: removeSkill, + addRemoteSkillToBotProjectFile: addRemoteSkill, }; }; diff --git a/Composer/packages/client/src/recoilModel/dispatchers/project.ts b/Composer/packages/client/src/recoilModel/dispatchers/project.ts index 90ef25ae5b..784e5aea50 100644 --- a/Composer/packages/client/src/recoilModel/dispatchers/project.ts +++ b/Composer/packages/client/src/recoilModel/dispatchers/project.ts @@ -115,7 +115,7 @@ export const projectDispatcher = () => { ); const addRemoteSkillToBotProject = useRecoilCallback( - (callbackHelpers: CallbackInterface) => async (manifestUrl: string, name: string, endpointName: string) => { + (callbackHelpers: CallbackInterface) => async (manifestUrl: string, endpointName: string) => { const { set, snapshot } = callbackHelpers; try { const dispatcher = await snapshot.getPromise(dispatcherState); @@ -125,9 +125,9 @@ export const projectDispatcher = () => { formatMessage('This operation cannot be completed. The skill is already part of the Bot Project') ); } - const skillNameIdentifier: string = await getSkillNameIdentifier(callbackHelpers, name); + set(botOpeningState, true); - const { projectId } = await openRemoteSkill(callbackHelpers, manifestUrl, skillNameIdentifier); + const { projectId } = await openRemoteSkill(callbackHelpers, manifestUrl); set(botProjectIdsState, (current) => [...current, projectId]); await dispatcher.addRemoteSkillToBotProjectFile(projectId, manifestUrl, endpointName); } catch (ex) { diff --git a/Composer/packages/client/src/recoilModel/dispatchers/utils/project.ts b/Composer/packages/client/src/recoilModel/dispatchers/utils/project.ts index e0bffa6dd2..01b112384b 100644 --- a/Composer/packages/client/src/recoilModel/dispatchers/utils/project.ts +++ b/Composer/packages/client/src/recoilModel/dispatchers/utils/project.ts @@ -1,12 +1,13 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. +import path from 'path'; + import { indexer, validateDialog } from '@bfc/indexers'; import { BotProjectFile, BotProjectSpace, BotProjectSpaceSkill, - convertFileProtocolToPath, convertSkillsToDictionary, dereferenceDefinitions, DialogInfo, @@ -350,7 +351,7 @@ export const removeRecentProject = async (callbackHelpers: CallbackInterface, pa export const openRemoteSkill = async ( callbackHelpers: CallbackInterface, manifestUrl: string, - botNameIdentifier: string + botNameIdentifier?: string ) => { const { set } = callbackHelpers; @@ -366,7 +367,8 @@ export const openRemoteSkill = async ( isRootBot: false, isRemote: true, }); - set(botNameIdentifierState(projectId), botNameIdentifier); + + set(botNameIdentifierState(projectId), botNameIdentifier || camelCase(manifestResponse.data.name)); set(botDisplayNameState(projectId), manifestResponse.data.name); set(locationState(projectId), manifestUrl); return { projectId, manifestResponse: manifestResponse.data }; @@ -458,7 +460,8 @@ const openRootBotAndSkills = async (callbackHelpers: CallbackInterface, data, st const mainDialog = await initBotState(callbackHelpers, projectData, botFiles); const rootBotProjectId = projectData.id; - const { name } = projectData; + const { name, location } = projectData; + set(botNameIdentifierState(rootBotProjectId), camelCase(name)); if (botFiles.botProjectSpaceFiles && botFiles.botProjectSpaceFiles.length) { @@ -477,8 +480,10 @@ const openRootBotAndSkills = async (callbackHelpers: CallbackInterface, data, st const skill = skills[nameIdentifier]; let skillPromise; if (!skill.remote && skill.workspace) { - const skillPath = convertFileProtocolToPath(skill.workspace); - skillPromise = openLocalSkill(callbackHelpers, skillPath, storageId, nameIdentifier); + const rootBotPath = location; + const skillPath = skill.workspace; + const absoluteSkillPath = path.resolve(rootBotPath, skillPath); + skillPromise = openLocalSkill(callbackHelpers, absoluteSkillPath, storageId, nameIdentifier); } else if (skill.manifest) { skillPromise = openRemoteSkill(callbackHelpers, skill.manifest, nameIdentifier); } @@ -564,6 +569,7 @@ export const checkIfBotExistsInBotProjectFile = async ( if (!rootBotProjectId) { throw new Error(formatMessage('The root bot is not a bot project')); } + const rootBotLocation = await snapshot.getPromise(locationState(rootBotProjectId)); const { content: botProjectFile } = await snapshot.getPromise(botProjectFileState(rootBotProjectId)); for (const uniqueSkillName in botProjectFile.skills) { @@ -574,8 +580,8 @@ export const checkIfBotExistsInBotProjectFile = async ( } } else { if (workspace) { - const resolvedPath = convertFileProtocolToPath(workspace); - if (pathOrManifest === resolvedPath) { + const absolutePathOfSkill = path.resolve(rootBotLocation, workspace); + if (pathOrManifest === absolutePathOfSkill) { return true; } } diff --git a/Composer/packages/lib/shared/__tests__/fileUtils/index.test.ts b/Composer/packages/lib/shared/__tests__/fileUtils/index.test.ts deleted file mode 100644 index 124c0e62cf..0000000000 --- a/Composer/packages/lib/shared/__tests__/fileUtils/index.test.ts +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. -import { convertAbsolutePathToFileProtocol, convertFileProtocolToPath } from '../../src/fileUtils'; - -it('should convert a posix path to file protocol', () => { - const testPath = '/Users/tester/empty-bot-0'; - expect(convertAbsolutePathToFileProtocol(testPath)).toBe('file:///Users/tester/empty-bot-0'); -}); - -it('should convert a windows path to file protocol', () => { - const testPath = 'C:/Users/Tester/empty-bot-0'; - expect(convertAbsolutePathToFileProtocol(testPath)).toBe('file:///C:/Users/Tester/empty-bot-0'); -}); - -it('should convert a Windows file protocol path to regular path', () => { - const testPath = 'file:///C:/Users/Tester/empty-bot-0'; - expect(convertFileProtocolToPath(testPath)).toBe('C:/Users/Tester/empty-bot-0'); -}); - -it('should convert a Mac file protocol path to regular path', () => { - const testPath = 'file:///users/tester/empty-bot-0'; - expect(convertFileProtocolToPath(testPath)).toBe('/users/tester/empty-bot-0'); -}); - -it('should give empty string if path is not available', () => { - const testPath = ''; - expect(convertFileProtocolToPath(testPath)).toBe(''); -}); diff --git a/Composer/packages/lib/shared/src/fileUtils/index.ts b/Composer/packages/lib/shared/src/fileUtils/index.ts deleted file mode 100644 index 0cb4cf7829..0000000000 --- a/Composer/packages/lib/shared/src/fileUtils/index.ts +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (c) Microsoft Corporation. -// Licensed under the MIT License. - -import trimStart from 'lodash/trimStart'; - -export const convertFileProtocolToPath = (pathToBot: string): string => { - const fileProtocolRemoved = pathToBot.replace('file://', ''); - if (fileProtocolRemoved.match(/^\/[a-zA-Z]:\//g)) { - //Windows path with file protocol. Remove leading / - return trimStart(fileProtocolRemoved, '/'); - } - return fileProtocolRemoved; -}; - -export const convertAbsolutePathToFileProtocol = (pathToBot: string): string => { - let pathName = pathToBot.replace(/\\/g, '/'); - // Windows drive letter must be prefixed with a slash - if (pathName[0] !== '/') { - pathName = '/' + pathName; - } - return encodeURI('file://' + pathName); -}; diff --git a/Composer/packages/lib/shared/src/index.ts b/Composer/packages/lib/shared/src/index.ts index 2d5f44518f..57d7843a58 100644 --- a/Composer/packages/lib/shared/src/index.ts +++ b/Composer/packages/lib/shared/src/index.ts @@ -25,5 +25,4 @@ export * from './schemaUtils'; export * from './viewUtils'; export * from './walkerUtils'; export * from './skillsUtils'; -export * from './fileUtils'; export const DialogUtils = dialogUtils; diff --git a/Composer/packages/server/schemas/botproject.schema b/Composer/packages/server/schemas/botproject.schema index 304d559cb6..c774c0334b 100644 --- a/Composer/packages/server/schemas/botproject.schema +++ b/Composer/packages/server/schemas/botproject.schema @@ -1,7 +1,7 @@ { "$schema": "http://json-schema.org/draft-07/schema#", "$id": "https://github.com/microsoft/BotFramework-Composer/blob/main/Composer/packages/server/schemas/botproject.schema", - "$version": "1.0.0", + "$version": "0.2.0", "title": "Root Bot and Skills workspace schema for a environment. Each publishing environment has a Bot Project file associated with it.", "description": "Schema that captures the relationship between the Root Bot and remote/local skills that the Root Bot consumes.", "type": "object", @@ -16,10 +16,6 @@ "type": "string", "description": "Name of the Root Bot." }, - "workspace": { - "type": "string", - "description": "Absolute path to the Root Bot. If a workspace is local, we use the file protocol as opposed to http/https for remote workspaces." - }, "skills": { "description": "List of skills (remote or local) skills that the Root Bot consumes.", "type": "object", @@ -54,7 +50,7 @@ }, "workspace": { "type": "string", - "description": "Absolute path to a skill workspace. If a workspace is local, we use the file protocol as opposed to http/https protocols for remote workspaces." + "description": "Path to the skill always relative to the Root Bot." }, "remote": { "description": "Indication if the skill is remote or local skill.", diff --git a/Composer/packages/server/src/models/bot/__tests__/botProject.test.ts b/Composer/packages/server/src/models/bot/__tests__/botProject.test.ts index 8c7a426e91..e3da0f8a70 100644 --- a/Composer/packages/server/src/models/bot/__tests__/botProject.test.ts +++ b/Composer/packages/server/src/models/bot/__tests__/botProject.test.ts @@ -24,7 +24,6 @@ jest.mock('../../../services/asset', () => { botProjectFileTemplate: { $schema: '', name: '', - workspace: '', skills: {}, }, }, diff --git a/Composer/packages/server/src/models/bot/botProject.ts b/Composer/packages/server/src/models/bot/botProject.ts index 5548e33fa7..1feecbdd89 100644 --- a/Composer/packages/server/src/models/bot/botProject.ts +++ b/Composer/packages/server/src/models/bot/botProject.ts @@ -6,16 +6,7 @@ import fs from 'fs'; import axios from 'axios'; import { autofixReferInDialog } from '@bfc/indexers'; -import { - getNewDesigner, - FileInfo, - Skill, - Diagnostic, - IBotProject, - DialogSetting, - FileExtensions, - convertAbsolutePathToFileProtocol, -} from '@bfc/shared'; +import { getNewDesigner, FileInfo, Diagnostic, IBotProject, DialogSetting, FileExtensions, Skill } from '@bfc/shared'; import merge from 'lodash/merge'; import { UserIdentity, ExtensionContext } from '@bfc/extension'; import { FeedbackType, generate } from '@microsoft/bf-generate-library'; @@ -375,7 +366,6 @@ export class BotProject implements IBotProject { for (const botProjectFile of this.botProjectFiles) { const { relativePath } = botProjectFile; const content = JSON.parse(botProjectFile.content); - content.workspace = convertAbsolutePathToFileProtocol(this.dataDir); content.name = botName; await this._updateFile(relativePath, JSON.stringify(content, null, 2)); } @@ -833,8 +823,6 @@ export class BotProject implements IBotProject { } const fileName = `${this.name}${FileExtensions.BotProject}`; const root = this.dataDir; - - defaultBotProjectFile.workspace = convertAbsolutePathToFileProtocol(root); defaultBotProjectFile.name = this.name; await this._createFile(fileName, JSON.stringify(defaultBotProjectFile, null, 2)); diff --git a/Composer/packages/types/src/indexers.ts b/Composer/packages/types/src/indexers.ts index 3cd40eb876..5596092ed5 100644 --- a/Composer/packages/types/src/indexers.ts +++ b/Composer/packages/types/src/indexers.ts @@ -225,7 +225,6 @@ export interface BotProjectSpaceSkill { } export interface BotProjectSpace { - workspace: string; name: string; skills: { [skillId: string]: BotProjectSpaceSkill; diff --git a/extensions/samples/assets/projects/ActionsSample/actionssample.botproj b/extensions/samples/assets/projects/ActionsSample/actionssample.botproj index 543cc3b976..daf6d1c8fe 100644 --- a/extensions/samples/assets/projects/ActionsSample/actionssample.botproj +++ b/extensions/samples/assets/projects/ActionsSample/actionssample.botproj @@ -1,6 +1,5 @@ { "$schema": "https://raw.githubusercontent.com/microsoft/BotFramework-Composer/main/Composer/packages/server/schemas/botproject.schema", "name": "", - "workspace": "", "skills": {} } diff --git a/extensions/samples/assets/projects/AskingQuestionsSample/askingquestionssample.botproj b/extensions/samples/assets/projects/AskingQuestionsSample/askingquestionssample.botproj index 543cc3b976..daf6d1c8fe 100644 --- a/extensions/samples/assets/projects/AskingQuestionsSample/askingquestionssample.botproj +++ b/extensions/samples/assets/projects/AskingQuestionsSample/askingquestionssample.botproj @@ -1,6 +1,5 @@ { "$schema": "https://raw.githubusercontent.com/microsoft/BotFramework-Composer/main/Composer/packages/server/schemas/botproject.schema", "name": "", - "workspace": "", "skills": {} } diff --git a/extensions/samples/assets/projects/ControllingConversationFlowSample/controllingconversationflowsample.botproj b/extensions/samples/assets/projects/ControllingConversationFlowSample/controllingconversationflowsample.botproj index 543cc3b976..daf6d1c8fe 100644 --- a/extensions/samples/assets/projects/ControllingConversationFlowSample/controllingconversationflowsample.botproj +++ b/extensions/samples/assets/projects/ControllingConversationFlowSample/controllingconversationflowsample.botproj @@ -1,6 +1,5 @@ { "$schema": "https://raw.githubusercontent.com/microsoft/BotFramework-Composer/main/Composer/packages/server/schemas/botproject.schema", "name": "", - "workspace": "", "skills": {} } diff --git a/extensions/samples/assets/projects/EchoBot/echobot.botproj b/extensions/samples/assets/projects/EchoBot/echobot.botproj index 543cc3b976..daf6d1c8fe 100644 --- a/extensions/samples/assets/projects/EchoBot/echobot.botproj +++ b/extensions/samples/assets/projects/EchoBot/echobot.botproj @@ -1,6 +1,5 @@ { "$schema": "https://raw.githubusercontent.com/microsoft/BotFramework-Composer/main/Composer/packages/server/schemas/botproject.schema", "name": "", - "workspace": "", "skills": {} } diff --git a/extensions/samples/assets/projects/EmptyBot/emptybot.botproj b/extensions/samples/assets/projects/EmptyBot/emptybot.botproj index 543cc3b976..daf6d1c8fe 100644 --- a/extensions/samples/assets/projects/EmptyBot/emptybot.botproj +++ b/extensions/samples/assets/projects/EmptyBot/emptybot.botproj @@ -1,6 +1,5 @@ { "$schema": "https://raw.githubusercontent.com/microsoft/BotFramework-Composer/main/Composer/packages/server/schemas/botproject.schema", "name": "", - "workspace": "", "skills": {} } diff --git a/extensions/samples/assets/projects/InterruptionSample/interruptionssample.botproj b/extensions/samples/assets/projects/InterruptionSample/interruptionssample.botproj index 543cc3b976..daf6d1c8fe 100644 --- a/extensions/samples/assets/projects/InterruptionSample/interruptionssample.botproj +++ b/extensions/samples/assets/projects/InterruptionSample/interruptionssample.botproj @@ -1,6 +1,5 @@ { "$schema": "https://raw.githubusercontent.com/microsoft/BotFramework-Composer/main/Composer/packages/server/schemas/botproject.schema", "name": "", - "workspace": "", "skills": {} } diff --git a/extensions/samples/assets/projects/QnAMakerLUISSample/qnamakerluissample.botproj b/extensions/samples/assets/projects/QnAMakerLUISSample/qnamakerluissample.botproj index 543cc3b976..daf6d1c8fe 100644 --- a/extensions/samples/assets/projects/QnAMakerLUISSample/qnamakerluissample.botproj +++ b/extensions/samples/assets/projects/QnAMakerLUISSample/qnamakerluissample.botproj @@ -1,6 +1,5 @@ { "$schema": "https://raw.githubusercontent.com/microsoft/BotFramework-Composer/main/Composer/packages/server/schemas/botproject.schema", "name": "", - "workspace": "", "skills": {} } diff --git a/extensions/samples/assets/projects/QnASample/qnasample.botproj b/extensions/samples/assets/projects/QnASample/qnasample.botproj index 543cc3b976..daf6d1c8fe 100644 --- a/extensions/samples/assets/projects/QnASample/qnasample.botproj +++ b/extensions/samples/assets/projects/QnASample/qnasample.botproj @@ -1,6 +1,5 @@ { "$schema": "https://raw.githubusercontent.com/microsoft/BotFramework-Composer/main/Composer/packages/server/schemas/botproject.schema", "name": "", - "workspace": "", "skills": {} } diff --git a/extensions/samples/assets/projects/RespondingWithCardsSample/respondingwithcardssample.botproj b/extensions/samples/assets/projects/RespondingWithCardsSample/respondingwithcardssample.botproj index 543cc3b976..daf6d1c8fe 100644 --- a/extensions/samples/assets/projects/RespondingWithCardsSample/respondingwithcardssample.botproj +++ b/extensions/samples/assets/projects/RespondingWithCardsSample/respondingwithcardssample.botproj @@ -1,6 +1,5 @@ { "$schema": "https://raw.githubusercontent.com/microsoft/BotFramework-Composer/main/Composer/packages/server/schemas/botproject.schema", "name": "", - "workspace": "", "skills": {} } diff --git a/extensions/samples/assets/projects/RespondingWithTextSample/respondingwithtextsample.botproj b/extensions/samples/assets/projects/RespondingWithTextSample/respondingwithtextsample.botproj index 543cc3b976..daf6d1c8fe 100644 --- a/extensions/samples/assets/projects/RespondingWithTextSample/respondingwithtextsample.botproj +++ b/extensions/samples/assets/projects/RespondingWithTextSample/respondingwithtextsample.botproj @@ -1,6 +1,5 @@ { "$schema": "https://raw.githubusercontent.com/microsoft/BotFramework-Composer/main/Composer/packages/server/schemas/botproject.schema", "name": "", - "workspace": "", "skills": {} } diff --git a/extensions/samples/assets/projects/ToDoBotWithLuisSample/todobotwithluissample.botproj b/extensions/samples/assets/projects/ToDoBotWithLuisSample/todobotwithluissample.botproj index 543cc3b976..daf6d1c8fe 100644 --- a/extensions/samples/assets/projects/ToDoBotWithLuisSample/todobotwithluissample.botproj +++ b/extensions/samples/assets/projects/ToDoBotWithLuisSample/todobotwithluissample.botproj @@ -1,6 +1,5 @@ { "$schema": "https://raw.githubusercontent.com/microsoft/BotFramework-Composer/main/Composer/packages/server/schemas/botproject.schema", "name": "", - "workspace": "", "skills": {} } diff --git a/extensions/samples/assets/projects/TodoSample/todosample.botproj b/extensions/samples/assets/projects/TodoSample/todosample.botproj index 543cc3b976..daf6d1c8fe 100644 --- a/extensions/samples/assets/projects/TodoSample/todosample.botproj +++ b/extensions/samples/assets/projects/TodoSample/todosample.botproj @@ -1,6 +1,5 @@ { "$schema": "https://raw.githubusercontent.com/microsoft/BotFramework-Composer/main/Composer/packages/server/schemas/botproject.schema", "name": "", - "workspace": "", "skills": {} }