{"action":"created","comment":{"url":"https://api.github.com/repos/juttle/juttle-engine/pulls/comments/52476545","id":52476545,"diff_hunk":"@@ -0,0 +1,158 @@\n+#!/usr/bin/env node\n+\n+/* eslint no-console: 0 */\n+var _ = require('underscore');\n+var minimist = require('minimist');\n+var JuttleServiceClient = require('juttle-service/lib/juttle-service-client');\n+var Promise = require('bluebird');\n+var WebSocket = require('ws');\n+var path = require('path');\n+var cli_errors = require('juttle/lib/cli/errors');\n+var open = require('open');\n+var JuttleBundler = require('juttle-service/lib/bundler');","path":"bin/juttle-engine-client","position":12,"original_position":12,"commit_id":"96887758da807394a7ee6ea41d917ddf34367af3","original_commit_id":"96887758da807394a7ee6ea41d917ddf34367af3","user":{"login":"go-oleg","id":3344137,"avatar_url":"https://avatars.githubusercontent.com/u/3344137?v=3","gravatar_id":"","url":"https://api.github.com/users/go-oleg","html_url":"https://github.com/go-oleg","followers_url":"https://api.github.com/users/go-oleg/followers","following_url":"https://api.github.com/users/go-oleg/following{/other_user}","gists_url":"https://api.github.com/users/go-oleg/gists{/gist_id}","starred_url":"https://api.github.com/users/go-oleg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/go-oleg/subscriptions","organizations_url":"https://api.github.com/users/go-oleg/orgs","repos_url":"https://api.github.com/users/go-oleg/repos","events_url":"https://api.github.com/users/go-oleg/events{/privacy}","received_events_url":"https://api.github.com/users/go-oleg/received_events","type":"User","site_admin":false},"body":"A bit weary of reaching into `juttle-service` and grabbing these modules. My understanding is that not everything in `juttle-service-/lib` is _public_, but there is not distinction between what is and isn't. This means that when making changes to `juttle-service` like renaming or moving files, a developer will have no idea if its a breaking change and which semver version should be incremented.\r\n\r\nPerhaps we can have one module within lib that exports everything that is public...or more everything that isn't public into some other directory?","created_at":"2016-02-10T15:53:57Z","updated_at":"2016-02-10T15:53:57Z","html_url":"https://github.com/juttle/juttle-engine/pull/19#discussion_r52476545","pull_request_url":"https://api.github.com/repos/juttle/juttle-engine/pulls/19","_links":{"self":{"href":"https://api.github.com/repos/juttle/juttle-engine/pulls/comments/52476545"},"html":{"href":"https://github.com/juttle/juttle-engine/pull/19#discussion_r52476545"},"pull_request":{"href":"https://api.github.com/repos/juttle/juttle-engine/pulls/19"}}},"pull_request":{"url":"https://api.github.com/repos/juttle/juttle-engine/pulls/19","id":58853110,"html_url":"https://github.com/juttle/juttle-engine/pull/19","diff_url":"https://github.com/juttle/juttle-engine/pull/19.diff","patch_url":"https://github.com/juttle/juttle-engine/pull/19.patch","issue_url":"https://api.github.com/repos/juttle/juttle-engine/issues/19","number":19,"state":"open","locked":false,"title":"Add client program.","user":{"login":"mstemm","id":13422831,"avatar_url":"https://avatars.githubusercontent.com/u/13422831?v=3","gravatar_id":"","url":"https://api.github.com/users/mstemm","html_url":"https://github.com/mstemm","followers_url":"https://api.github.com/users/mstemm/followers","following_url":"https://api.github.com/users/mstemm/following{/other_user}","gists_url":"https://api.github.com/users/mstemm/gists{/gist_id}","starred_url":"https://api.github.com/users/mstemm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mstemm/subscriptions","organizations_url":"https://api.github.com/users/mstemm/orgs","repos_url":"https://api.github.com/users/mstemm/repos","events_url":"https://api.github.com/users/mstemm/events{/privacy}","received_events_url":"https://api.github.com/users/mstemm/received_events","type":"User","site_admin":false},"body":"Add client program bin/juttle-engine-client, which inherits all the\r\ncapabilities of juttle-service-client and additionally has the\r\nfollowing commands:\r\n - browser --path <path>\r\n - push --path <path> [--topic <topic>]\r\n - watch --path <path> [--topic <topic>]\r\n\r\nThanks to the changes in juttle/juttle-service#22, this is easy as\r\ndefining some commands/cmdargs and implementing the commands in\r\nfunctions. The functions were all copied from the latest\r\noutrigger-client.\r\n\r\nAlso add the endpoint notifier back and add a handler for websocket\r\nconnections on /rendezvous/:topic to pass websocket connections to the\r\nendpoint notifier. I also switched endpoint notifier to ES6 classes.\r\n\r\nAdd all necessary new packages to package.json. Although when I\r\ntested, I used the master github version of juttle-servive, I didn't\r\ncheck in that change. We'll need to update package.json to an\r\nappropriate version of juttle-service.\r\n\r\n@mnibecker I was thinking after this merges we should move the rendezvous endpoint below /api/v0. Now that it's separate from juttle-service, there's no confusion about what endpoints are official for juttle job management and what are for client/browser interactions.\r\n\r\n@demmer @go-oleg ","created_at":"2016-02-10T06:39:32Z","updated_at":"2016-02-10T15:53:57Z","closed_at":null,"merged_at":null,"merge_commit_sha":"7247fd2e838088c2583f59b1c0cf1a95955fb869","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/juttle/juttle-engine/pulls/19/commits","review_comments_url":"https://api.github.com/repos/juttle/juttle-engine/pulls/19/comments","review_comment_url":"https://api.github.com/repos/juttle/juttle-engine/pulls/comments{/number}","comments_url":"https://api.github.com/repos/juttle/juttle-engine/issues/19/comments","statuses_url":"https://api.github.com/repos/juttle/juttle-engine/statuses/96887758da807394a7ee6ea41d917ddf34367af3","head":{"label":"juttle:add-client-program","ref":"add-client-program","sha":"96887758da807394a7ee6ea41d917ddf34367af3","user":{"login":"juttle","id":8988633,"avatar_url":"https://avatars.githubusercontent.com/u/8988633?v=3","gravatar_id":"","url":"https://api.github.com/users/juttle","html_url":"https://github.com/juttle","followers_url":"https://api.github.com/users/juttle/followers","following_url":"https://api.github.com/users/juttle/following{/other_user}","gists_url":"https://api.github.com/users/juttle/gists{/gist_id}","starred_url":"https://api.github.com/users/juttle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/juttle/subscriptions","organizations_url":"https://api.github.com/users/juttle/orgs","repos_url":"https://api.github.com/users/juttle/repos","events_url":"https://api.github.com/users/juttle/events{/privacy}","received_events_url":"https://api.github.com/users/juttle/received_events","type":"Organization","site_admin":false},"repo":{"id":51180780,"name":"juttle-engine","full_name":"juttle/juttle-engine","owner":{"login":"juttle","id":8988633,"avatar_url":"https://avatars.githubusercontent.com/u/8988633?v=3","gravatar_id":"","url":"https://api.github.com/users/juttle","html_url":"https://github.com/juttle","followers_url":"https://api.github.com/users/juttle/followers","following_url":"https://api.github.com/users/juttle/following{/other_user}","gists_url":"https://api.github.com/users/juttle/gists{/gist_id}","starred_url":"https://api.github.com/users/juttle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/juttle/subscriptions","organizations_url":"https://api.github.com/users/juttle/orgs","repos_url":"https://api.github.com/users/juttle/repos","events_url":"https://api.github.com/users/juttle/events{/privacy}","received_events_url":"https://api.github.com/users/juttle/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/juttle/juttle-engine","description":"juttle execution engine","fork":false,"url":"https://api.github.com/repos/juttle/juttle-engine","forks_url":"https://api.github.com/repos/juttle/juttle-engine/forks","keys_url":"https://api.github.com/repos/juttle/juttle-engine/keys{/key_id}","collaborators_url":"https://api.github.com/repos/juttle/juttle-engine/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/juttle/juttle-engine/teams","hooks_url":"https://api.github.com/repos/juttle/juttle-engine/hooks","issue_events_url":"https://api.github.com/repos/juttle/juttle-engine/issues/events{/number}","events_url":"https://api.github.com/repos/juttle/juttle-engine/events","assignees_url":"https://api.github.com/repos/juttle/juttle-engine/assignees{/user}","branches_url":"https://api.github.com/repos/juttle/juttle-engine/branches{/branch}","tags_url":"https://api.github.com/repos/juttle/juttle-engine/tags","blobs_url":"https://api.github.com/repos/juttle/juttle-engine/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/juttle/juttle-engine/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/juttle/juttle-engine/git/refs{/sha}","trees_url":"https://api.github.com/repos/juttle/juttle-engine/git/trees{/sha}","statuses_url":"https://api.github.com/repos/juttle/juttle-engine/statuses/{sha}","languages_url":"https://api.github.com/repos/juttle/juttle-engine/languages","stargazers_url":"https://api.github.com/repos/juttle/juttle-engine/stargazers","contributors_url":"https://api.github.com/repos/juttle/juttle-engine/contributors","subscribers_url":"https://api.github.com/repos/juttle/juttle-engine/subscribers","subscription_url":"https://api.github.com/repos/juttle/juttle-engine/subscription","commits_url":"https://api.github.com/repos/juttle/juttle-engine/commits{/sha}","git_commits_url":"https://api.github.com/repos/juttle/juttle-engine/git/commits{/sha}","comments_url":"https://api.github.com/repos/juttle/juttle-engine/comments{/number}","issue_comment_url":"https://api.github.com/repos/juttle/juttle-engine/issues/comments{/number}","contents_url":"https://api.github.com/repos/juttle/juttle-engine/contents/{+path}","compare_url":"https://api.github.com/repos/juttle/juttle-engine/compare/{base}...{head}","merges_url":"https://api.github.com/repos/juttle/juttle-engine/merges","archive_url":"https://api.github.com/repos/juttle/juttle-engine/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/juttle/juttle-engine/downloads","issues_url":"https://api.github.com/repos/juttle/juttle-engine/issues{/number}","pulls_url":"https://api.github.com/repos/juttle/juttle-engine/pulls{/number}","milestones_url":"https://api.github.com/repos/juttle/juttle-engine/milestones{/number}","notifications_url":"https://api.github.com/repos/juttle/juttle-engine/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/juttle/juttle-engine/labels{/name}","releases_url":"https://api.github.com/repos/juttle/juttle-engine/releases{/id}","deployments_url":"https://api.github.com/repos/juttle/juttle-engine/deployments","created_at":"2016-02-05T23:29:37Z","updated_at":"2016-02-09T18:57:32Z","pushed_at":"2016-02-10T06:39:32Z","git_url":"git://github.com/juttle/juttle-engine.git","ssh_url":"git@github.com:juttle/juttle-engine.git","clone_url":"https://github.com/juttle/juttle-engine.git","svn_url":"https://github.com/juttle/juttle-engine","homepage":null,"size":45784,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":10,"forks":0,"open_issues":10,"watchers":0,"default_branch":"master"}},"base":{"label":"juttle:master","ref":"master","sha":"9d25367e1bb773e20df45de7feeedcc1cbc9bf7b","user":{"login":"juttle","id":8988633,"avatar_url":"https://avatars.githubusercontent.com/u/8988633?v=3","gravatar_id":"","url":"https://api.github.com/users/juttle","html_url":"https://github.com/juttle","followers_url":"https://api.github.com/users/juttle/followers","following_url":"https://api.github.com/users/juttle/following{/other_user}","gists_url":"https://api.github.com/users/juttle/gists{/gist_id}","starred_url":"https://api.github.com/users/juttle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/juttle/subscriptions","organizations_url":"https://api.github.com/users/juttle/orgs","repos_url":"https://api.github.com/users/juttle/repos","events_url":"https://api.github.com/users/juttle/events{/privacy}","received_events_url":"https://api.github.com/users/juttle/received_events","type":"Organization","site_admin":false},"repo":{"id":51180780,"name":"juttle-engine","full_name":"juttle/juttle-engine","owner":{"login":"juttle","id":8988633,"avatar_url":"https://avatars.githubusercontent.com/u/8988633?v=3","gravatar_id":"","url":"https://api.github.com/users/juttle","html_url":"https://github.com/juttle","followers_url":"https://api.github.com/users/juttle/followers","following_url":"https://api.github.com/users/juttle/following{/other_user}","gists_url":"https://api.github.com/users/juttle/gists{/gist_id}","starred_url":"https://api.github.com/users/juttle/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/juttle/subscriptions","organizations_url":"https://api.github.com/users/juttle/orgs","repos_url":"https://api.github.com/users/juttle/repos","events_url":"https://api.github.com/users/juttle/events{/privacy}","received_events_url":"https://api.github.com/users/juttle/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/juttle/juttle-engine","description":"juttle execution engine","fork":false,"url":"https://api.github.com/repos/juttle/juttle-engine","forks_url":"https://api.github.com/repos/juttle/juttle-engine/forks","keys_url":"https://api.github.com/repos/juttle/juttle-engine/keys{/key_id}","collaborators_url":"https://api.github.com/repos/juttle/juttle-engine/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/juttle/juttle-engine/teams","hooks_url":"https://api.github.com/repos/juttle/juttle-engine/hooks","issue_events_url":"https://api.github.com/repos/juttle/juttle-engine/issues/events{/number}","events_url":"https://api.github.com/repos/juttle/juttle-engine/events","assignees_url":"https://api.github.com/repos/juttle/juttle-engine/assignees{/user}","branches_url":"https://api.github.com/repos/juttle/juttle-engine/branches{/branch}","tags_url":"https://api.github.com/repos/juttle/juttle-engine/tags","blobs_url":"https://api.github.com/repos/juttle/juttle-engine/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/juttle/juttle-engine/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/juttle/juttle-engine/git/refs{/sha}","trees_url":"https://api.github.com/repos/juttle/juttle-engine/git/trees{/sha}","statuses_url":"https://api.github.com/repos/juttle/juttle-engine/statuses/{sha}","languages_url":"https://api.github.com/repos/juttle/juttle-engine/languages","stargazers_url":"https://api.github.com/repos/juttle/juttle-engine/stargazers","contributors_url":"https://api.github.com/repos/juttle/juttle-engine/contributors","subscribers_url":"https://api.github.com/repos/juttle/juttle-engine/subscribers","subscription_url":"https://api.github.com/repos/juttle/juttle-engine/subscription","commits_url":"https://api.github.com/repos/juttle/juttle-engine/commits{/sha}","git_commits_url":"https://api.github.com/repos/juttle/juttle-engine/git/commits{/sha}","comments_url":"https://api.github.com/repos/juttle/juttle-engine/comments{/number}","issue_comment_url":"https://api.github.com/repos/juttle/juttle-engine/issues/comments{/number}","contents_url":"https://api.github.com/repos/juttle/juttle-engine/contents/{+path}","compare_url":"https://api.github.com/repos/juttle/juttle-engine/compare/{base}...{head}","merges_url":"https://api.github.com/repos/juttle/juttle-engine/merges","archive_url":"https://api.github.com/repos/juttle/juttle-engine/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/juttle/juttle-engine/downloads","issues_url":"https://api.github.com/repos/juttle/juttle-engine/issues{/number}","pulls_url":"https://api.github.com/repos/juttle/juttle-engine/pulls{/number}","milestones_url":"https://api.github.com/repos/juttle/juttle-engine/milestones{/number}","notifications_url":"https://api.github.com/repos/juttle/juttle-engine/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/juttle/juttle-engine/labels{/name}","releases_url":"https://api.github.com/repos/juttle/juttle-engine/releases{/id}","deployments_url":"https://api.github.com/repos/juttle/juttle-engine/deployments","created_at":"2016-02-05T23:29:37Z","updated_at":"2016-02-09T18:57:32Z","pushed_at":"2016-02-10T06:39:32Z","git_url":"git://github.com/juttle/juttle-engine.git","ssh_url":"git@github.com:juttle/juttle-engine.git","clone_url":"https://github.com/juttle/juttle-engine.git","svn_url":"https://github.com/juttle/juttle-engine","homepage":null,"size":45784,"stargazers_count":0,"watchers_count":0,"language":"JavaScript","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":10,"forks":0,"open_issues":10,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/juttle/juttle-engine/pulls/19"},"html":{"href":"https://github.com/juttle/juttle-engine/pull/19"},"issue":{"href":"https://api.github.com/repos/juttle/juttle-engine/issues/19"},"comments":{"href":"https://api.github.com/repos/juttle/juttle-engine/issues/19/comments"},"review_comments":{"href":"https://api.github.com/repos/juttle/juttle-engine/pulls/19/comments"},"review_comment":{"href":"https://api.github.com/repos/juttle/juttle-engine/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/juttle/juttle-engine/pulls/19/commits"},"statuses":{"href":"https://api.github.com/repos/juttle/juttle-engine/statuses/96887758da807394a7ee6ea41d917ddf34367af3"}}}}