{"action":"created","comment":{"url":"https://api.github.com/repos/boydc2014/composer-prototype/pulls/comments/253250431","pull_request_review_id":199330845,"id":253250431,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDI1MzI1MDQzMQ==","diff_hunk":"@@ -1,178 +1,114 @@\n-# composer-prototype\n+# Composer (prototype)\n+\n The prototype of BF composer, showing the architecure, and the extension system.\n \n-# architecture\n+# Architecture\n \n ## components\n \n-This project mainly includes three components\n-1. Composer app\n-   \n-    Composer app is a web app providing editing experience on the underlying bot. Composer will reference one bot in the `bots` folder. \n-\n-    Composer app can also start the bot, by invoking `bot launcher`, then allow users to test bot in composer. \n-\n-2. Bot launcher\n-\n-    Bot launcher will load an bot from `bots` folder, and start a bot instance, ready to serve. It will allow composer and anyone to connect to. \n-\n-3. Bots\n-\n-    Bots folder is the storage of bot assets. Here it just contains a bunch of folders and files. The storage layer holds the ground truth of each bot. \n-\n-Each bot is defined by a \".bot\" file, which includes all the references to the assets this bot would use. \n-\n-\n-## interactions\n-The interactions between each component looks like:\n-\n-* Composer -- `Edit` --> Bots\n-\n-* Composer --`Launch`--> Bot Launcher\n+This prototype includes two components\n \n-* Bot launcher -- `load` --> Bots\n+####application\n \n-Note that those interactions are one-way, thus the dependency is one-directoin. This would greatly simplify the design of each component. \n+  A web app providing an editing experience on bot assets. The application has access to any bots made available to it from the `bots` property in `config.json`. See below for more details.\n \n-## key points\n+  The application also has the ability to start the bot via the BotLauncher. This is a common scenario after one has used the application's dialog editing capabilities and wants to see the current state of the dialogs through conversation with the bot's runtime.\n \n-In this one-direction dependency design. A few key points about this kind of architecure that help understand are that\n+####launcher\n \n+  On command, the launcher will load an bot from `Bots` folder, and start a bot instance and have it ready to serve at a public endpoint. The application will then be able to connect to it during a conversational design session.\n \n-* `Bots` holds ground truth.\n+  The launcher watches the bot assets (.lu, .lg, .dialog) and reloads the bot runtime when a change in these files are observed.\n \n-  Which means everything about the bot, not composer, not bot launcher. \n-  \n-  Composer and bot launcher can be viewed as stateless applications, which only have a reference to bots. \n+####bots\n+Each bot is defined by a \".bot\" file, which includes all the references to the assets this bot would use. **note** this is not the shape of the .bot file currently used in SDK v4 of Bot Framework Emulator v4. The structure of the .bot file is subject to change. \n \n-* `Bot launcher` don't design with `composer` in mind. \n+## data flow\n \n-  Bot launcher only depends and focus on `bots`. Nothing to do with composer. Even though composer will be able to run the launcher. \n+The bot's assets are the source of truth for the bot at any given time. The Application will hold dirty bot dialogs that will be lost until written into the bot's assets. The BotLauncher only references the state of the bot's assets and cannot read dirty bot assets held in the application.\n \n-* `Composer` knows everything about `bots` and `bot launcher` \n-  \n-  Composer needs to know how to start the launcher with property configuration to launcher specific bot. \n+<Needs Image>\n \n ## folder structure\n \n-Then let's explore the structure of each component, and dive into some config files to show how this kind of intertion is supported by those files. \n-\n-Here is a overview of the folder structure, with hightlighting on some important config files. \n+Here is a overview of a potential folder structure\n \n     /- BotLauncher\n       /- CSharp\n-        /- appsettings.json (has a ref to xx.bot, otherwise which bot to run?)\n-    /- Bots\n-      /- SampleBot1\n-        /- bot1.bot    (bot project file, maybe we can call it .botproject, all files should be referenced here)\n+      /- Node\n     /- Composer\n       /- config.json   (the config to the composer)\n-      /- launcher.json (composer use this config to start Bot Launcher)\n+    ...somewhere else on disk\n+    /-echo-bot\n+      /.bot\n \n+## a bot's .bot file\n \n-It's very clearly divided in the top level, each component has it's own folder. \n+Here is an example of a .bot file intended to run on Node, with glob patterns for bot asset discovery.\n \n-## .bot file\n-The most important file in `Bots` folder is each .bot file, which defined a bot, containing all the references within this bot. \n ```\n-/Bots/SampleBot1/bot1.bot\n-\n {\n-    services: [\n-        // luis\n-        // qna\n-    ],\n-\n-    files: [\n-        ./**/*.lu\n-        ./**/*.lg\n-        ./**/*.dialog\n-    ]\n-    \n-    entry: \"./dialogs/start.dialog\"\n+  services: [\n+    {\n+      type: \"luis\",\n+      endpoint: ${luis_endpoint},\n+      app_id: ${luis_app_id},\n+      token: ${luis_token} \n+    },\n+    {\n+      type: \"qna\",\n+      endpoint: ${qna_endpoint},\n+      app_id: ${qna_app_id},\n+      token: ${qna_token} \n+    }\n+  ],\n \n-}\n+  files: [\n+    \"./**/*.lu\",\n+    \"./**/*.lg\",\n+    \"./**/*.dialog\"\n+  ]\n \n+  dialogEntry: \"./dialogs/start.dialog\",\n+  start: \"node index.js\"\n+}\n ```\n \n-.bot is basicly a project file, include all the references to all assets, and other necessary infomation to run a bot. \n-\n-## Bot launcher configuration\n+the .bot file is used for the following:\n+- asset discovery via glob patterns\n+- service discovery for luis and qna, etc\n+- service credentials\n+- entry points for the dialog tree and the bot's runtime.\n \n-Since all assets are defined in bots. The bot launcher's config is simple, only need to know about where to find a bot.\n-\n-```\n-/BotLauncher/CSharp/appsettings.json\n-{\n-    // this is the bot to be launched\n-    bot: {\n-        provider: \"localDisk\",\n-        path: \"../../Bots/SampleBot1/bot1.bot\n-    }\n-\n-    // it may include some othe info to run like\n-    endpoint: \"localhost:3979\"\n-}\n-```\n+**note:** a goal to consider is the service credentials being *templated* in this file. we've made assumptions in the past about where these credentials should be stored and their shape.\n \n ## Composer configuration\n \n ### config.json\n \n-config.json in composer is where to specfic \n-1. which bot we are editing (if we follow vscode convention, this should be in .composer, but let's make it simple here)\n-2. which launcher we are using\n-\n ```\n-/Composer/config.json \n {\n-    // this is the bot we are editing\\composing\n-    bot: {\n-        provider: \"localDisk\"\n-        path: \"../../Bots/SampleBot1/bot1.bot\"\n-    }\n-    \n-    launcher: {\n-        startCommand: \"cp launcher.json '../../BotLauncher/CSharp/appsetings.json' && cd '../../BotLauncher/CSharp' && dotnet run\"\n+  // the path to the BotLauncher root\n+  launcherDir: \"../../BotLauncher\",\n+  bots: [","path":"README.md","position":189,"original_position":189,"commit_id":"56e71c7a2d00ae76878168eb04ae505cee57e1f0","original_commit_id":"56e71c7a2d00ae76878168eb04ae505cee57e1f0","user":{"login":"cwhitten","id":1156704,"node_id":"MDQ6VXNlcjExNTY3MDQ=","avatar_url":"https://avatars3.githubusercontent.com/u/1156704?v=4","gravatar_id":"","url":"https://api.github.com/users/cwhitten","html_url":"https://github.com/cwhitten","followers_url":"https://api.github.com/users/cwhitten/followers","following_url":"https://api.github.com/users/cwhitten/following{/other_user}","gists_url":"https://api.github.com/users/cwhitten/gists{/gist_id}","starred_url":"https://api.github.com/users/cwhitten/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cwhitten/subscriptions","organizations_url":"https://api.github.com/users/cwhitten/orgs","repos_url":"https://api.github.com/users/cwhitten/repos","events_url":"https://api.github.com/users/cwhitten/events{/privacy}","received_events_url":"https://api.github.com/users/cwhitten/received_events","type":"User","site_admin":false},"body":"why can't this be an array of bots? ","created_at":"2019-02-02T02:45:49Z","updated_at":"2019-02-02T02:49:17Z","html_url":"https://github.com/boydc2014/composer-prototype/pull/11#discussion_r253250431","pull_request_url":"https://api.github.com/repos/boydc2014/composer-prototype/pulls/11","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/boydc2014/composer-prototype/pulls/comments/253250431"},"html":{"href":"https://github.com/boydc2014/composer-prototype/pull/11#discussion_r253250431"},"pull_request":{"href":"https://api.github.com/repos/boydc2014/composer-prototype/pulls/11"}}},"pull_request":{"url":"https://api.github.com/repos/boydc2014/composer-prototype/pulls/11","id":249785613,"node_id":"MDExOlB1bGxSZXF1ZXN0MjQ5Nzg1NjEz","html_url":"https://github.com/boydc2014/composer-prototype/pull/11","diff_url":"https://github.com/boydc2014/composer-prototype/pull/11.diff","patch_url":"https://github.com/boydc2014/composer-prototype/pull/11.patch","issue_url":"https://api.github.com/repos/boydc2014/composer-prototype/issues/11","number":11,"state":"open","locked":false,"title":"Feedback for discussion","user":{"login":"cwhitten","id":1156704,"node_id":"MDQ6VXNlcjExNTY3MDQ=","avatar_url":"https://avatars3.githubusercontent.com/u/1156704?v=4","gravatar_id":"","url":"https://api.github.com/users/cwhitten","html_url":"https://github.com/cwhitten","followers_url":"https://api.github.com/users/cwhitten/followers","following_url":"https://api.github.com/users/cwhitten/following{/other_user}","gists_url":"https://api.github.com/users/cwhitten/gists{/gist_id}","starred_url":"https://api.github.com/users/cwhitten/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cwhitten/subscriptions","organizations_url":"https://api.github.com/users/cwhitten/orgs","repos_url":"https://api.github.com/users/cwhitten/repos","events_url":"https://api.github.com/users/cwhitten/events{/privacy}","received_events_url":"https://api.github.com/users/cwhitten/received_events","type":"User","site_admin":false},"body":"","created_at":"2019-02-02T02:41:39Z","updated_at":"2019-02-02T02:49:17Z","closed_at":null,"merged_at":null,"merge_commit_sha":"54f8994247ad6b13f9fdb503a4fbc8ccdc5ada33","assignee":null,"assignees":[],"requested_reviewers":[{"login":"boydc2014","id":3829387,"node_id":"MDQ6VXNlcjM4MjkzODc=","avatar_url":"https://avatars3.githubusercontent.com/u/3829387?v=4","gravatar_id":"","url":"https://api.github.com/users/boydc2014","html_url":"https://github.com/boydc2014","followers_url":"https://api.github.com/users/boydc2014/followers","following_url":"https://api.github.com/users/boydc2014/following{/other_user}","gists_url":"https://api.github.com/users/boydc2014/gists{/gist_id}","starred_url":"https://api.github.com/users/boydc2014/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/boydc2014/subscriptions","organizations_url":"https://api.github.com/users/boydc2014/orgs","repos_url":"https://api.github.com/users/boydc2014/repos","events_url":"https://api.github.com/users/boydc2014/events{/privacy}","received_events_url":"https://api.github.com/users/boydc2014/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/boydc2014/composer-prototype/pulls/11/commits","review_comments_url":"https://api.github.com/repos/boydc2014/composer-prototype/pulls/11/comments","review_comment_url":"https://api.github.com/repos/boydc2014/composer-prototype/pulls/comments{/number}","comments_url":"https://api.github.com/repos/boydc2014/composer-prototype/issues/11/comments","statuses_url":"https://api.github.com/repos/boydc2014/composer-prototype/statuses/56e71c7a2d00ae76878168eb04ae505cee57e1f0","head":{"label":"boydc2014:cwhitten-feedback","ref":"cwhitten-feedback","sha":"56e71c7a2d00ae76878168eb04ae505cee57e1f0","user":{"login":"boydc2014","id":3829387,"node_id":"MDQ6VXNlcjM4MjkzODc=","avatar_url":"https://avatars3.githubusercontent.com/u/3829387?v=4","gravatar_id":"","url":"https://api.github.com/users/boydc2014","html_url":"https://github.com/boydc2014","followers_url":"https://api.github.com/users/boydc2014/followers","following_url":"https://api.github.com/users/boydc2014/following{/other_user}","gists_url":"https://api.github.com/users/boydc2014/gists{/gist_id}","starred_url":"https://api.github.com/users/boydc2014/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/boydc2014/subscriptions","organizations_url":"https://api.github.com/users/boydc2014/orgs","repos_url":"https://api.github.com/users/boydc2014/repos","events_url":"https://api.github.com/users/boydc2014/events{/privacy}","received_events_url":"https://api.github.com/users/boydc2014/received_events","type":"User","site_admin":false},"repo":{"id":168463728,"node_id":"MDEwOlJlcG9zaXRvcnkxNjg0NjM3Mjg=","name":"composer-prototype","full_name":"boydc2014/composer-prototype","private":false,"owner":{"login":"boydc2014","id":3829387,"node_id":"MDQ6VXNlcjM4MjkzODc=","avatar_url":"https://avatars3.githubusercontent.com/u/3829387?v=4","gravatar_id":"","url":"https://api.github.com/users/boydc2014","html_url":"https://github.com/boydc2014","followers_url":"https://api.github.com/users/boydc2014/followers","following_url":"https://api.github.com/users/boydc2014/following{/other_user}","gists_url":"https://api.github.com/users/boydc2014/gists{/gist_id}","starred_url":"https://api.github.com/users/boydc2014/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/boydc2014/subscriptions","organizations_url":"https://api.github.com/users/boydc2014/orgs","repos_url":"https://api.github.com/users/boydc2014/repos","events_url":"https://api.github.com/users/boydc2014/events{/privacy}","received_events_url":"https://api.github.com/users/boydc2014/received_events","type":"User","site_admin":false},"html_url":"https://github.com/boydc2014/composer-prototype","description":"The prototype of BF composer, showing the architecture, the folder structure, and the extension system.","fork":false,"url":"https://api.github.com/repos/boydc2014/composer-prototype","forks_url":"https://api.github.com/repos/boydc2014/composer-prototype/forks","keys_url":"https://api.github.com/repos/boydc2014/composer-prototype/keys{/key_id}","collaborators_url":"https://api.github.com/repos/boydc2014/composer-prototype/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/boydc2014/composer-prototype/teams","hooks_url":"https://api.github.com/repos/boydc2014/composer-prototype/hooks","issue_events_url":"https://api.github.com/repos/boydc2014/composer-prototype/issues/events{/number}","events_url":"https://api.github.com/repos/boydc2014/composer-prototype/events","assignees_url":"https://api.github.com/repos/boydc2014/composer-prototype/assignees{/user}","branches_url":"https://api.github.com/repos/boydc2014/composer-prototype/branches{/branch}","tags_url":"https://api.github.com/repos/boydc2014/composer-prototype/tags","blobs_url":"https://api.github.com/repos/boydc2014/composer-prototype/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/boydc2014/composer-prototype/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/boydc2014/composer-prototype/git/refs{/sha}","trees_url":"https://api.github.com/repos/boydc2014/composer-prototype/git/trees{/sha}","statuses_url":"https://api.github.com/repos/boydc2014/composer-prototype/statuses/{sha}","languages_url":"https://api.github.com/repos/boydc2014/composer-prototype/languages","stargazers_url":"https://api.github.com/repos/boydc2014/composer-prototype/stargazers","contributors_url":"https://api.github.com/repos/boydc2014/composer-prototype/contributors","subscribers_url":"https://api.github.com/repos/boydc2014/composer-prototype/subscribers","subscription_url":"https://api.github.com/repos/boydc2014/composer-prototype/subscription","commits_url":"https://api.github.com/repos/boydc2014/composer-prototype/commits{/sha}","git_commits_url":"https://api.github.com/repos/boydc2014/composer-prototype/git/commits{/sha}","comments_url":"https://api.github.com/repos/boydc2014/composer-prototype/comments{/number}","issue_comment_url":"https://api.github.com/repos/boydc2014/composer-prototype/issues/comments{/number}","contents_url":"https://api.github.com/repos/boydc2014/composer-prototype/contents/{+path}","compare_url":"https://api.github.com/repos/boydc2014/composer-prototype/compare/{base}...{head}","merges_url":"https://api.github.com/repos/boydc2014/composer-prototype/merges","archive_url":"https://api.github.com/repos/boydc2014/composer-prototype/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/boydc2014/composer-prototype/downloads","issues_url":"https://api.github.com/repos/boydc2014/composer-prototype/issues{/number}","pulls_url":"https://api.github.com/repos/boydc2014/composer-prototype/pulls{/number}","milestones_url":"https://api.github.com/repos/boydc2014/composer-prototype/milestones{/number}","notifications_url":"https://api.github.com/repos/boydc2014/composer-prototype/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/boydc2014/composer-prototype/labels{/name}","releases_url":"https://api.github.com/repos/boydc2014/composer-prototype/releases{/id}","deployments_url":"https://api.github.com/repos/boydc2014/composer-prototype/deployments","created_at":"2019-01-31T04:38:01Z","updated_at":"2019-02-01T14:36:10Z","pushed_at":"2019-02-02T02:41:40Z","git_url":"git://github.com/boydc2014/composer-prototype.git","ssh_url":"git@github.com:boydc2014/composer-prototype.git","clone_url":"https://github.com/boydc2014/composer-prototype.git","svn_url":"https://github.com/boydc2014/composer-prototype","homepage":"","size":1018,"stargazers_count":1,"watchers_count":1,"language":"HTML","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"archived":false,"open_issues_count":3,"license":null,"forks":2,"open_issues":3,"watchers":1,"default_branch":"master"}},"base":{"label":"boydc2014:master","ref":"master","sha":"0d01ba4acab2607a659f914a2a673e8fcbb71d18","user":{"login":"boydc2014","id":3829387,"node_id":"MDQ6VXNlcjM4MjkzODc=","avatar_url":"https://avatars3.githubusercontent.com/u/3829387?v=4","gravatar_id":"","url":"https://api.github.com/users/boydc2014","html_url":"https://github.com/boydc2014","followers_url":"https://api.github.com/users/boydc2014/followers","following_url":"https://api.github.com/users/boydc2014/following{/other_user}","gists_url":"https://api.github.com/users/boydc2014/gists{/gist_id}","starred_url":"https://api.github.com/users/boydc2014/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/boydc2014/subscriptions","organizations_url":"https://api.github.com/users/boydc2014/orgs","repos_url":"https://api.github.com/users/boydc2014/repos","events_url":"https://api.github.com/users/boydc2014/events{/privacy}","received_events_url":"https://api.github.com/users/boydc2014/received_events","type":"User","site_admin":false},"repo":{"id":168463728,"node_id":"MDEwOlJlcG9zaXRvcnkxNjg0NjM3Mjg=","name":"composer-prototype","full_name":"boydc2014/composer-prototype","private":false,"owner":{"login":"boydc2014","id":3829387,"node_id":"MDQ6VXNlcjM4MjkzODc=","avatar_url":"https://avatars3.githubusercontent.com/u/3829387?v=4","gravatar_id":"","url":"https://api.github.com/users/boydc2014","html_url":"https://github.com/boydc2014","followers_url":"https://api.github.com/users/boydc2014/followers","following_url":"https://api.github.com/users/boydc2014/following{/other_user}","gists_url":"https://api.github.com/users/boydc2014/gists{/gist_id}","starred_url":"https://api.github.com/users/boydc2014/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/boydc2014/subscriptions","organizations_url":"https://api.github.com/users/boydc2014/orgs","repos_url":"https://api.github.com/users/boydc2014/repos","events_url":"https://api.github.com/users/boydc2014/events{/privacy}","received_events_url":"https://api.github.com/users/boydc2014/received_events","type":"User","site_admin":false},"html_url":"https://github.com/boydc2014/composer-prototype","description":"The prototype of BF composer, showing the architecture, the folder structure, and the extension system.","fork":false,"url":"https://api.github.com/repos/boydc2014/composer-prototype","forks_url":"https://api.github.com/repos/boydc2014/composer-prototype/forks","keys_url":"https://api.github.com/repos/boydc2014/composer-prototype/keys{/key_id}","collaborators_url":"https://api.github.com/repos/boydc2014/composer-prototype/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/boydc2014/composer-prototype/teams","hooks_url":"https://api.github.com/repos/boydc2014/composer-prototype/hooks","issue_events_url":"https://api.github.com/repos/boydc2014/composer-prototype/issues/events{/number}","events_url":"https://api.github.com/repos/boydc2014/composer-prototype/events","assignees_url":"https://api.github.com/repos/boydc2014/composer-prototype/assignees{/user}","branches_url":"https://api.github.com/repos/boydc2014/composer-prototype/branches{/branch}","tags_url":"https://api.github.com/repos/boydc2014/composer-prototype/tags","blobs_url":"https://api.github.com/repos/boydc2014/composer-prototype/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/boydc2014/composer-prototype/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/boydc2014/composer-prototype/git/refs{/sha}","trees_url":"https://api.github.com/repos/boydc2014/composer-prototype/git/trees{/sha}","statuses_url":"https://api.github.com/repos/boydc2014/composer-prototype/statuses/{sha}","languages_url":"https://api.github.com/repos/boydc2014/composer-prototype/languages","stargazers_url":"https://api.github.com/repos/boydc2014/composer-prototype/stargazers","contributors_url":"https://api.github.com/repos/boydc2014/composer-prototype/contributors","subscribers_url":"https://api.github.com/repos/boydc2014/composer-prototype/subscribers","subscription_url":"https://api.github.com/repos/boydc2014/composer-prototype/subscription","commits_url":"https://api.github.com/repos/boydc2014/composer-prototype/commits{/sha}","git_commits_url":"https://api.github.com/repos/boydc2014/composer-prototype/git/commits{/sha}","comments_url":"https://api.github.com/repos/boydc2014/composer-prototype/comments{/number}","issue_comment_url":"https://api.github.com/repos/boydc2014/composer-prototype/issues/comments{/number}","contents_url":"https://api.github.com/repos/boydc2014/composer-prototype/contents/{+path}","compare_url":"https://api.github.com/repos/boydc2014/composer-prototype/compare/{base}...{head}","merges_url":"https://api.github.com/repos/boydc2014/composer-prototype/merges","archive_url":"https://api.github.com/repos/boydc2014/composer-prototype/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/boydc2014/composer-prototype/downloads","issues_url":"https://api.github.com/repos/boydc2014/composer-prototype/issues{/number}","pulls_url":"https://api.github.com/repos/boydc2014/composer-prototype/pulls{/number}","milestones_url":"https://api.github.com/repos/boydc2014/composer-prototype/milestones{/number}","notifications_url":"https://api.github.com/repos/boydc2014/composer-prototype/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/boydc2014/composer-prototype/labels{/name}","releases_url":"https://api.github.com/repos/boydc2014/composer-prototype/releases{/id}","deployments_url":"https://api.github.com/repos/boydc2014/composer-prototype/deployments","created_at":"2019-01-31T04:38:01Z","updated_at":"2019-02-01T14:36:10Z","pushed_at":"2019-02-02T02:41:40Z","git_url":"git://github.com/boydc2014/composer-prototype.git","ssh_url":"git@github.com:boydc2014/composer-prototype.git","clone_url":"https://github.com/boydc2014/composer-prototype.git","svn_url":"https://github.com/boydc2014/composer-prototype","homepage":"","size":1018,"stargazers_count":1,"watchers_count":1,"language":"HTML","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2,"mirror_url":null,"archived":false,"open_issues_count":3,"license":null,"forks":2,"open_issues":3,"watchers":1,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/boydc2014/composer-prototype/pulls/11"},"html":{"href":"https://github.com/boydc2014/composer-prototype/pull/11"},"issue":{"href":"https://api.github.com/repos/boydc2014/composer-prototype/issues/11"},"comments":{"href":"https://api.github.com/repos/boydc2014/composer-prototype/issues/11/comments"},"review_comments":{"href":"https://api.github.com/repos/boydc2014/composer-prototype/pulls/11/comments"},"review_comment":{"href":"https://api.github.com/repos/boydc2014/composer-prototype/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/boydc2014/composer-prototype/pulls/11/commits"},"statuses":{"href":"https://api.github.com/repos/boydc2014/composer-prototype/statuses/56e71c7a2d00ae76878168eb04ae505cee57e1f0"}},"author_association":"COLLABORATOR"}}
{"actor":{"display_login":"cwhitten"}}