@vess-id/vess 0.2.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (280) hide show
  1. package/LICENSE +64 -0
  2. package/README.md +223 -0
  3. package/bin/vess.js +2 -0
  4. package/dist/__mocks__/@napi-rs/keyring.d.ts +9 -0
  5. package/dist/__mocks__/@napi-rs/keyring.d.ts.map +1 -0
  6. package/dist/__mocks__/@napi-rs/keyring.js +33 -0
  7. package/dist/__mocks__/@napi-rs/keyring.js.map +1 -0
  8. package/dist/__mocks__/node-mac-auth.d.ts +8 -0
  9. package/dist/__mocks__/node-mac-auth.d.ts.map +1 -0
  10. package/dist/__mocks__/node-mac-auth.js +29 -0
  11. package/dist/__mocks__/node-mac-auth.js.map +1 -0
  12. package/dist/adapter/mcp/http-transport.d.ts +34 -0
  13. package/dist/adapter/mcp/http-transport.d.ts.map +1 -0
  14. package/dist/adapter/mcp/http-transport.js +158 -0
  15. package/dist/adapter/mcp/http-transport.js.map +1 -0
  16. package/dist/adapter/mcp/mcp-adapter.d.ts +37 -0
  17. package/dist/adapter/mcp/mcp-adapter.d.ts.map +1 -0
  18. package/dist/adapter/mcp/mcp-adapter.js +48 -0
  19. package/dist/adapter/mcp/mcp-adapter.js.map +1 -0
  20. package/dist/adapter/mcp/mcp-server.factory.d.ts +35 -0
  21. package/dist/adapter/mcp/mcp-server.factory.d.ts.map +1 -0
  22. package/dist/adapter/mcp/mcp-server.factory.js +114 -0
  23. package/dist/adapter/mcp/mcp-server.factory.js.map +1 -0
  24. package/dist/adapter/mcp/stdio-transport.d.ts +7 -0
  25. package/dist/adapter/mcp/stdio-transport.d.ts.map +1 -0
  26. package/dist/adapter/mcp/stdio-transport.js +13 -0
  27. package/dist/adapter/mcp/stdio-transport.js.map +1 -0
  28. package/dist/adapter/mcp/transport.d.ts +10 -0
  29. package/dist/adapter/mcp/transport.d.ts.map +1 -0
  30. package/dist/adapter/mcp/transport.js +14 -0
  31. package/dist/adapter/mcp/transport.js.map +1 -0
  32. package/dist/approval/approval-token.d.ts +23 -0
  33. package/dist/approval/approval-token.d.ts.map +1 -0
  34. package/dist/approval/approval-token.js +81 -0
  35. package/dist/approval/approval-token.js.map +1 -0
  36. package/dist/audit/audit-dto-mapper.d.ts +29 -0
  37. package/dist/audit/audit-dto-mapper.d.ts.map +1 -0
  38. package/dist/audit/audit-dto-mapper.js +61 -0
  39. package/dist/audit/audit-dto-mapper.js.map +1 -0
  40. package/dist/audit/audit-logger.d.ts +35 -0
  41. package/dist/audit/audit-logger.d.ts.map +1 -0
  42. package/dist/audit/audit-logger.js +67 -0
  43. package/dist/audit/audit-logger.js.map +1 -0
  44. package/dist/audit/audit-sync.d.ts +12 -0
  45. package/dist/audit/audit-sync.d.ts.map +1 -0
  46. package/dist/audit/audit-sync.js +65 -0
  47. package/dist/audit/audit-sync.js.map +1 -0
  48. package/dist/auth/user-authenticator.d.ts +51 -0
  49. package/dist/auth/user-authenticator.d.ts.map +1 -0
  50. package/dist/auth/user-authenticator.js +155 -0
  51. package/dist/auth/user-authenticator.js.map +1 -0
  52. package/dist/cli/cli-db.d.ts +12 -0
  53. package/dist/cli/cli-db.d.ts.map +1 -0
  54. package/dist/cli/cli-db.js +20 -0
  55. package/dist/cli/cli-db.js.map +1 -0
  56. package/dist/cli/cli-utils.d.ts +14 -0
  57. package/dist/cli/cli-utils.d.ts.map +1 -0
  58. package/dist/cli/cli-utils.js +57 -0
  59. package/dist/cli/cli-utils.js.map +1 -0
  60. package/dist/cli/daemon-utils.d.ts +30 -0
  61. package/dist/cli/daemon-utils.d.ts.map +1 -0
  62. package/dist/cli/daemon-utils.js +131 -0
  63. package/dist/cli/daemon-utils.js.map +1 -0
  64. package/dist/cli/daemon.d.ts +13 -0
  65. package/dist/cli/daemon.d.ts.map +1 -0
  66. package/dist/cli/daemon.js +207 -0
  67. package/dist/cli/daemon.js.map +1 -0
  68. package/dist/cli/doctor.d.ts +2 -0
  69. package/dist/cli/doctor.d.ts.map +1 -0
  70. package/dist/cli/doctor.js +135 -0
  71. package/dist/cli/doctor.js.map +1 -0
  72. package/dist/cli/env-delete.d.ts +6 -0
  73. package/dist/cli/env-delete.d.ts.map +1 -0
  74. package/dist/cli/env-delete.js +80 -0
  75. package/dist/cli/env-delete.js.map +1 -0
  76. package/dist/cli/env-list.d.ts +5 -0
  77. package/dist/cli/env-list.d.ts.map +1 -0
  78. package/dist/cli/env-list.js +42 -0
  79. package/dist/cli/env-list.js.map +1 -0
  80. package/dist/cli/env-post-integration.d.ts +21 -0
  81. package/dist/cli/env-post-integration.d.ts.map +1 -0
  82. package/dist/cli/env-post-integration.js +300 -0
  83. package/dist/cli/env-post-integration.js.map +1 -0
  84. package/dist/cli/env-restore.d.ts +15 -0
  85. package/dist/cli/env-restore.d.ts.map +1 -0
  86. package/dist/cli/env-restore.js +130 -0
  87. package/dist/cli/env-restore.js.map +1 -0
  88. package/dist/cli/env.d.ts +14 -0
  89. package/dist/cli/env.d.ts.map +1 -0
  90. package/dist/cli/env.js +182 -0
  91. package/dist/cli/env.js.map +1 -0
  92. package/dist/cli/error-handlers.d.ts +13 -0
  93. package/dist/cli/error-handlers.d.ts.map +1 -0
  94. package/dist/cli/error-handlers.js +32 -0
  95. package/dist/cli/error-handlers.js.map +1 -0
  96. package/dist/cli/hook-check-env.d.ts +12 -0
  97. package/dist/cli/hook-check-env.d.ts.map +1 -0
  98. package/dist/cli/hook-check-env.js +117 -0
  99. package/dist/cli/hook-check-env.js.map +1 -0
  100. package/dist/cli/index.d.ts +2 -0
  101. package/dist/cli/index.d.ts.map +1 -0
  102. package/dist/cli/index.js +294 -0
  103. package/dist/cli/index.js.map +1 -0
  104. package/dist/cli/init-guard.d.ts +13 -0
  105. package/dist/cli/init-guard.d.ts.map +1 -0
  106. package/dist/cli/init-guard.js +62 -0
  107. package/dist/cli/init-guard.js.map +1 -0
  108. package/dist/cli/init.d.ts +19 -0
  109. package/dist/cli/init.d.ts.map +1 -0
  110. package/dist/cli/init.js +440 -0
  111. package/dist/cli/init.js.map +1 -0
  112. package/dist/cli/install.d.ts +14 -0
  113. package/dist/cli/install.d.ts.map +1 -0
  114. package/dist/cli/install.js +186 -0
  115. package/dist/cli/install.js.map +1 -0
  116. package/dist/cli/login.d.ts +6 -0
  117. package/dist/cli/login.d.ts.map +1 -0
  118. package/dist/cli/login.js +76 -0
  119. package/dist/cli/login.js.map +1 -0
  120. package/dist/cli/logs.d.ts +32 -0
  121. package/dist/cli/logs.d.ts.map +1 -0
  122. package/dist/cli/logs.js +147 -0
  123. package/dist/cli/logs.js.map +1 -0
  124. package/dist/cli/project.d.ts +8 -0
  125. package/dist/cli/project.d.ts.map +1 -0
  126. package/dist/cli/project.js +102 -0
  127. package/dist/cli/project.js.map +1 -0
  128. package/dist/cli/reset.d.ts +8 -0
  129. package/dist/cli/reset.d.ts.map +1 -0
  130. package/dist/cli/reset.js +137 -0
  131. package/dist/cli/reset.js.map +1 -0
  132. package/dist/cli/run.d.ts +22 -0
  133. package/dist/cli/run.d.ts.map +1 -0
  134. package/dist/cli/run.js +103 -0
  135. package/dist/cli/run.js.map +1 -0
  136. package/dist/cli/start.d.ts +2 -0
  137. package/dist/cli/start.d.ts.map +1 -0
  138. package/dist/cli/start.js +29 -0
  139. package/dist/cli/start.js.map +1 -0
  140. package/dist/cli/status.d.ts +12 -0
  141. package/dist/cli/status.d.ts.map +1 -0
  142. package/dist/cli/status.js +131 -0
  143. package/dist/cli/status.js.map +1 -0
  144. package/dist/cli/uninstall.d.ts +8 -0
  145. package/dist/cli/uninstall.d.ts.map +1 -0
  146. package/dist/cli/uninstall.js +111 -0
  147. package/dist/cli/uninstall.js.map +1 -0
  148. package/dist/config/config.d.ts +10 -0
  149. package/dist/config/config.d.ts.map +1 -0
  150. package/dist/config/config.js +64 -0
  151. package/dist/config/config.js.map +1 -0
  152. package/dist/config/constants.d.ts +3 -0
  153. package/dist/config/constants.d.ts.map +1 -0
  154. package/dist/config/constants.js +6 -0
  155. package/dist/config/constants.js.map +1 -0
  156. package/dist/config/paths.d.ts +9 -0
  157. package/dist/config/paths.d.ts.map +1 -0
  158. package/dist/config/paths.js +58 -0
  159. package/dist/config/paths.js.map +1 -0
  160. package/dist/core/execution-engine.d.ts +119 -0
  161. package/dist/core/execution-engine.d.ts.map +1 -0
  162. package/dist/core/execution-engine.js +1291 -0
  163. package/dist/core/execution-engine.js.map +1 -0
  164. package/dist/core/runtime.d.ts +43 -0
  165. package/dist/core/runtime.d.ts.map +1 -0
  166. package/dist/core/runtime.js +143 -0
  167. package/dist/core/runtime.js.map +1 -0
  168. package/dist/core/sync-scheduler.d.ts +42 -0
  169. package/dist/core/sync-scheduler.d.ts.map +1 -0
  170. package/dist/core/sync-scheduler.js +131 -0
  171. package/dist/core/sync-scheduler.js.map +1 -0
  172. package/dist/core/types.d.ts +77 -0
  173. package/dist/core/types.d.ts.map +1 -0
  174. package/dist/core/types.js +7 -0
  175. package/dist/core/types.js.map +1 -0
  176. package/dist/daemon/service-manager.d.ts +68 -0
  177. package/dist/daemon/service-manager.d.ts.map +1 -0
  178. package/dist/daemon/service-manager.js +303 -0
  179. package/dist/daemon/service-manager.js.map +1 -0
  180. package/dist/env/env-classifier.d.ts +14 -0
  181. package/dist/env/env-classifier.d.ts.map +1 -0
  182. package/dist/env/env-classifier.js +94 -0
  183. package/dist/env/env-classifier.js.map +1 -0
  184. package/dist/env/env-parser.d.ts +13 -0
  185. package/dist/env/env-parser.d.ts.map +1 -0
  186. package/dist/env/env-parser.js +33 -0
  187. package/dist/env/env-parser.js.map +1 -0
  188. package/dist/env/env-profile-store.d.ts +15 -0
  189. package/dist/env/env-profile-store.d.ts.map +1 -0
  190. package/dist/env/env-profile-store.js +35 -0
  191. package/dist/env/env-profile-store.js.map +1 -0
  192. package/dist/env/env-reference.d.ts +10 -0
  193. package/dist/env/env-reference.d.ts.map +1 -0
  194. package/dist/env/env-reference.js +33 -0
  195. package/dist/env/env-reference.js.map +1 -0
  196. package/dist/env/env-resolver.d.ts +18 -0
  197. package/dist/env/env-resolver.d.ts.map +1 -0
  198. package/dist/env/env-resolver.js +48 -0
  199. package/dist/env/env-resolver.js.map +1 -0
  200. package/dist/env/fs-utils.d.ts +9 -0
  201. package/dist/env/fs-utils.d.ts.map +1 -0
  202. package/dist/env/fs-utils.js +59 -0
  203. package/dist/env/fs-utils.js.map +1 -0
  204. package/dist/env/secret-backend.d.ts +15 -0
  205. package/dist/env/secret-backend.d.ts.map +1 -0
  206. package/dist/env/secret-backend.js +24 -0
  207. package/dist/env/secret-backend.js.map +1 -0
  208. package/dist/executor/executor-registry.d.ts +22 -0
  209. package/dist/executor/executor-registry.d.ts.map +1 -0
  210. package/dist/executor/executor-registry.js +42 -0
  211. package/dist/executor/executor-registry.js.map +1 -0
  212. package/dist/executor/process-launcher.d.ts +26 -0
  213. package/dist/executor/process-launcher.d.ts.map +1 -0
  214. package/dist/executor/process-launcher.js +98 -0
  215. package/dist/executor/process-launcher.js.map +1 -0
  216. package/dist/executor/secret-file.d.ts +28 -0
  217. package/dist/executor/secret-file.d.ts.map +1 -0
  218. package/dist/executor/secret-file.js +127 -0
  219. package/dist/executor/secret-file.js.map +1 -0
  220. package/dist/gateway/auth.d.ts +26 -0
  221. package/dist/gateway/auth.d.ts.map +1 -0
  222. package/dist/gateway/auth.js +66 -0
  223. package/dist/gateway/auth.js.map +1 -0
  224. package/dist/gateway/gateway-client.d.ts +298 -0
  225. package/dist/gateway/gateway-client.d.ts.map +1 -0
  226. package/dist/gateway/gateway-client.js +501 -0
  227. package/dist/gateway/gateway-client.js.map +1 -0
  228. package/dist/identity/agent-identity.d.ts +29 -0
  229. package/dist/identity/agent-identity.d.ts.map +1 -0
  230. package/dist/identity/agent-identity.js +54 -0
  231. package/dist/identity/agent-identity.js.map +1 -0
  232. package/dist/identity/did-manager.d.ts +17 -0
  233. package/dist/identity/did-manager.d.ts.map +1 -0
  234. package/dist/identity/did-manager.js +29 -0
  235. package/dist/identity/did-manager.js.map +1 -0
  236. package/dist/identity/key-manager.d.ts +18 -0
  237. package/dist/identity/key-manager.d.ts.map +1 -0
  238. package/dist/identity/key-manager.js +101 -0
  239. package/dist/identity/key-manager.js.map +1 -0
  240. package/dist/identity/session-key.d.ts +13 -0
  241. package/dist/identity/session-key.d.ts.map +1 -0
  242. package/dist/identity/session-key.js +17 -0
  243. package/dist/identity/session-key.js.map +1 -0
  244. package/dist/policy/policy-evaluator.d.ts +63 -0
  245. package/dist/policy/policy-evaluator.d.ts.map +1 -0
  246. package/dist/policy/policy-evaluator.js +266 -0
  247. package/dist/policy/policy-evaluator.js.map +1 -0
  248. package/dist/policy/policy-loader.d.ts +10 -0
  249. package/dist/policy/policy-loader.d.ts.map +1 -0
  250. package/dist/policy/policy-loader.js +71 -0
  251. package/dist/policy/policy-loader.js.map +1 -0
  252. package/dist/policy/types.d.ts +21 -0
  253. package/dist/policy/types.d.ts.map +1 -0
  254. package/dist/policy/types.js +3 -0
  255. package/dist/policy/types.js.map +1 -0
  256. package/dist/utils/credential-errors.d.ts +3 -0
  257. package/dist/utils/credential-errors.d.ts.map +1 -0
  258. package/dist/utils/credential-errors.js +23 -0
  259. package/dist/utils/credential-errors.js.map +1 -0
  260. package/dist/utils/resource-canonicalizer.d.ts +19 -0
  261. package/dist/utils/resource-canonicalizer.d.ts.map +1 -0
  262. package/dist/utils/resource-canonicalizer.js +100 -0
  263. package/dist/utils/resource-canonicalizer.js.map +1 -0
  264. package/dist/utils/vc-utils.d.ts +23 -0
  265. package/dist/utils/vc-utils.d.ts.map +1 -0
  266. package/dist/utils/vc-utils.js +53 -0
  267. package/dist/utils/vc-utils.js.map +1 -0
  268. package/dist/wallet/sqlite.d.ts +4 -0
  269. package/dist/wallet/sqlite.d.ts.map +1 -0
  270. package/dist/wallet/sqlite.js +158 -0
  271. package/dist/wallet/sqlite.js.map +1 -0
  272. package/dist/wallet/vp-builder.d.ts +18 -0
  273. package/dist/wallet/vp-builder.d.ts.map +1 -0
  274. package/dist/wallet/vp-builder.js +46 -0
  275. package/dist/wallet/vp-builder.js.map +1 -0
  276. package/dist/wallet/wallet.d.ts +58 -0
  277. package/dist/wallet/wallet.d.ts.map +1 -0
  278. package/dist/wallet/wallet.js +170 -0
  279. package/dist/wallet/wallet.js.map +1 -0
  280. package/package.json +80 -0
@@ -0,0 +1,440 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.runInit = runInit;
37
+ const fs = __importStar(require("fs"));
38
+ const ai_identity_1 = require("@vess-id/ai-identity");
39
+ const did_manager_1 = require("../identity/did-manager");
40
+ const key_manager_1 = require("../identity/key-manager");
41
+ const paths_1 = require("../config/paths");
42
+ const config_1 = require("../config/config");
43
+ const sqlite_1 = require("../wallet/sqlite");
44
+ const readline = __importStar(require("node:readline/promises"));
45
+ const cli_utils_1 = require("./cli-utils");
46
+ const constants_1 = require("../config/constants");
47
+ const service_manager_1 = require("../daemon/service-manager");
48
+ const install_1 = require("./install");
49
+ const DEFAULT_GATEWAY_URL = 'https://staging.app.vesslabs.ai';
50
+ const DEFAULT_POLICY = {
51
+ v: '1',
52
+ rules: [
53
+ {
54
+ effect: 'deny',
55
+ provider: 'os',
56
+ resource: { type: 'secret', pattern: '~/.ssh/**' },
57
+ actions: ['secret.read', 'secret.write'],
58
+ },
59
+ {
60
+ effect: 'deny',
61
+ provider: 'os',
62
+ resource: { type: 'secret', pattern: '~/.aws/**' },
63
+ actions: ['secret.read', 'secret.write'],
64
+ },
65
+ {
66
+ effect: 'deny',
67
+ provider: 'os',
68
+ resource: { type: 'secret', pattern: '~/.gnupg/**' },
69
+ actions: ['secret.read', 'secret.write'],
70
+ },
71
+ ],
72
+ };
73
+ // ---------------------------------------------------------------------------
74
+ // Helper: non-fatal warning
75
+ // ---------------------------------------------------------------------------
76
+ function warnNonFatal(action, err, fallbackCmd) {
77
+ const message = err instanceof Error ? err.message : String(err);
78
+ (0, cli_utils_1.log)(` Warning: ${action}: ${message}`);
79
+ (0, cli_utils_1.log)(` You can do this later with "${fallbackCmd}"`);
80
+ }
81
+ // ---------------------------------------------------------------------------
82
+ // Helper: fetch projects from Gateway and store in SQLite
83
+ // ---------------------------------------------------------------------------
84
+ async function promptProjectSelection(projects) {
85
+ if (!process.stdin.isTTY) {
86
+ return 0;
87
+ }
88
+ const rl = readline.createInterface({
89
+ input: process.stdin,
90
+ output: process.stderr,
91
+ });
92
+ try {
93
+ (0, cli_utils_1.log)('');
94
+ (0, cli_utils_1.log)(' Available projects:');
95
+ for (let i = 0; i < projects.length; i++) {
96
+ (0, cli_utils_1.log)(` ${i + 1}. ${projects[i].name}`);
97
+ }
98
+ (0, cli_utils_1.log)('');
99
+ const answer = await rl.question(' Select default project [1]: ');
100
+ const idx = answer.trim() === '' ? 0 : parseInt(answer.trim(), 10) - 1;
101
+ if (Number.isInteger(idx) && idx >= 0 && idx < projects.length) {
102
+ return idx;
103
+ }
104
+ (0, cli_utils_1.log)(' Invalid selection, using first project.');
105
+ return 0;
106
+ }
107
+ catch {
108
+ return 0;
109
+ }
110
+ finally {
111
+ rl.close();
112
+ }
113
+ }
114
+ async function fetchAndStoreProjects(db, gatewayUrl, sessionToken, skipPrompt) {
115
+ let defaultProjectId;
116
+ try {
117
+ (0, cli_utils_1.log)('Fetching projects...');
118
+ const response = await fetch(`${gatewayUrl}/api/v1/projects`, {
119
+ method: 'GET',
120
+ headers: {
121
+ 'Content-Type': 'application/json',
122
+ 'X-Device-Session-Token': sessionToken,
123
+ },
124
+ signal: AbortSignal.timeout(10000),
125
+ });
126
+ if (response.ok) {
127
+ const body = (await response.json());
128
+ const projects = body.projects || body.data || [];
129
+ // Store projects in SQLite
130
+ for (const project of projects) {
131
+ db.prepare('INSERT OR REPLACE INTO projects (id, name, is_default, synced_at) VALUES (?, ?, 0, ?)').run(project.id, project.name, Date.now());
132
+ }
133
+ if (projects.length === 1) {
134
+ defaultProjectId = projects[0].id;
135
+ db.prepare('UPDATE projects SET is_default = 1 WHERE id = ?').run(defaultProjectId);
136
+ (0, cli_utils_1.log)(` Project: ${projects[0].name} (auto-selected)`);
137
+ }
138
+ else if (projects.length > 1) {
139
+ let selectedIdx = 0;
140
+ if (!skipPrompt) {
141
+ selectedIdx = await promptProjectSelection(projects);
142
+ }
143
+ defaultProjectId = projects[selectedIdx].id;
144
+ db.prepare('UPDATE projects SET is_default = 1 WHERE id = ?').run(defaultProjectId);
145
+ (0, cli_utils_1.log)(` Default project: ${projects[selectedIdx].name}`);
146
+ }
147
+ else {
148
+ (0, cli_utils_1.log)('');
149
+ (0, cli_utils_1.log)(' ⚠ No projects found for your account.');
150
+ (0, cli_utils_1.log)('');
151
+ (0, cli_utils_1.log)(' To get started:');
152
+ (0, cli_utils_1.log)(' 1. Open https://app.vess.id/projects');
153
+ (0, cli_utils_1.log)(' 2. Create a new project');
154
+ (0, cli_utils_1.log)(' 3. Connect your integrations (Slack, Google, Jira)');
155
+ (0, cli_utils_1.log)(' 4. Run "vess project sync" to fetch your project');
156
+ }
157
+ }
158
+ else {
159
+ (0, cli_utils_1.log)(` Failed to fetch projects (HTTP ${response.status}). Set defaultProjectId manually.`);
160
+ }
161
+ }
162
+ catch {
163
+ (0, cli_utils_1.log)(' Could not fetch projects (non-fatal). Set defaultProjectId manually.');
164
+ }
165
+ return defaultProjectId;
166
+ }
167
+ // ---------------------------------------------------------------------------
168
+ // Helper: daemon setup
169
+ // ---------------------------------------------------------------------------
170
+ async function setupDaemon(options) {
171
+ if (options.noDaemon)
172
+ return false;
173
+ const platform = service_manager_1.ServiceManager.getPlatform();
174
+ if (platform === 'unsupported') {
175
+ (0, cli_utils_1.log)(' Daemon auto-start not supported on this platform.');
176
+ (0, cli_utils_1.log)(' Use "vess daemon start" for manual start.');
177
+ return false;
178
+ }
179
+ // When skipPrompt=true (non-interactive mode), daemon installation proceeds
180
+ // without confirmation. Callers should pass noDaemon=true to skip this step
181
+ // in CI/automation environments.
182
+ let shouldInstall = true;
183
+ if (!options.skipPrompt) {
184
+ const rl = readline.createInterface({
185
+ input: process.stdin,
186
+ output: process.stderr,
187
+ });
188
+ try {
189
+ shouldInstall = await (0, cli_utils_1.promptYesNo)(rl, 'Setup daemon (auto-starts on login, localhost only)?');
190
+ }
191
+ finally {
192
+ rl.close();
193
+ }
194
+ }
195
+ if (shouldInstall) {
196
+ try {
197
+ (0, cli_utils_1.log)('');
198
+ (0, cli_utils_1.log)('Setting up daemon...');
199
+ await service_manager_1.ServiceManager.install({
200
+ port: undefined,
201
+ homeDir: options.homeDir,
202
+ });
203
+ (0, cli_utils_1.log)(' Daemon installed (auto-starts on login, auto-restarts on crash)');
204
+ return true;
205
+ }
206
+ catch (err) {
207
+ warnNonFatal('Could not install daemon', err, 'vess daemon enable');
208
+ }
209
+ }
210
+ else {
211
+ (0, cli_utils_1.log)(' Skipped daemon setup. Using stdio mode.');
212
+ (0, cli_utils_1.log)(' You can set it up later with "vess daemon enable"');
213
+ }
214
+ return false;
215
+ }
216
+ // ---------------------------------------------------------------------------
217
+ // Helper: display banners
218
+ // ---------------------------------------------------------------------------
219
+ function displayPrerequisitesBanner() {
220
+ (0, cli_utils_1.log)('');
221
+ (0, cli_utils_1.log)('╔════════════════════════════════════════════╗');
222
+ (0, cli_utils_1.log)('║ VESS Init — Device Setup ║');
223
+ (0, cli_utils_1.log)('╚════════════════════════════════════════════╝');
224
+ (0, cli_utils_1.log)('');
225
+ (0, cli_utils_1.log)('Prerequisites:');
226
+ (0, cli_utils_1.log)(' • VESS account → Sign up at https://app.vesslabs.ai');
227
+ (0, cli_utils_1.log)(' • Project created → Create one in the web dashboard');
228
+ (0, cli_utils_1.log)(' • Slack/Google/Jira integrations (optional)');
229
+ (0, cli_utils_1.log)(' → Configure in web dashboard before init');
230
+ (0, cli_utils_1.log)('');
231
+ }
232
+ function displayCompletionBanner(rootDid, defaultProjectId, daemonInstalled, configPath) {
233
+ (0, cli_utils_1.log)('');
234
+ (0, cli_utils_1.log)('✔ Setup complete!');
235
+ (0, cli_utils_1.log)('');
236
+ (0, cli_utils_1.log)(` Root DID: ${rootDid}`);
237
+ (0, cli_utils_1.log)(` Project: ${defaultProjectId || '(none)'}`);
238
+ (0, cli_utils_1.log)(` Daemon: ${daemonInstalled ? 'installed (auto-start)' : 'not installed (stdio mode)'}`);
239
+ (0, cli_utils_1.log)(` Config: ${configPath}`);
240
+ (0, cli_utils_1.log)('');
241
+ (0, cli_utils_1.log)('Next steps:');
242
+ (0, cli_utils_1.log)(' 1. Restart Claude Code to load the MCP server');
243
+ (0, cli_utils_1.log)(' 2. vess status → Verify everything is working');
244
+ if (!defaultProjectId) {
245
+ (0, cli_utils_1.log)('');
246
+ (0, cli_utils_1.log)(' ⚠ No project linked. Create one at https://app.vess.id/projects');
247
+ (0, cli_utils_1.log)(' then run "vess project sync"');
248
+ }
249
+ }
250
+ /**
251
+ * Roll back all artifacts created during init.
252
+ * Each operation is individually guarded so one failure
253
+ * does not prevent the remaining cleanup.
254
+ */
255
+ function rollbackInit(ctx) {
256
+ // Close DB connection first (before unlinking the file)
257
+ if (ctx.db) {
258
+ try {
259
+ ctx.db.close();
260
+ }
261
+ catch {
262
+ /* already closed or never opened */
263
+ }
264
+ }
265
+ // Remove keychain entries
266
+ try {
267
+ ctx.km.deleteRootKey();
268
+ }
269
+ catch {
270
+ /* best-effort */
271
+ }
272
+ try {
273
+ ctx.km.deleteSessionToken();
274
+ }
275
+ catch {
276
+ /* best-effort */
277
+ }
278
+ // Uninstall daemon service if it was installed during this init
279
+ service_manager_1.ServiceManager.uninstall({ homeDir: ctx.homeDir }).catch(() => {
280
+ /* best-effort */
281
+ });
282
+ // Remove created files
283
+ for (const filePath of [ctx.paths.walletDb, ctx.paths.configFile, ctx.paths.policyFile]) {
284
+ try {
285
+ if (fs.existsSync(filePath))
286
+ fs.unlinkSync(filePath);
287
+ }
288
+ catch {
289
+ /* best-effort */
290
+ }
291
+ }
292
+ // Remove baseDir only if we created it during this init
293
+ if (!ctx.baseDirExisted) {
294
+ try {
295
+ if (fs.existsSync(ctx.paths.baseDir)) {
296
+ fs.rmSync(ctx.paths.baseDir, { recursive: true, force: true });
297
+ }
298
+ }
299
+ catch {
300
+ /* best-effort */
301
+ }
302
+ }
303
+ (0, cli_utils_1.log)('Initialization rolled back.');
304
+ }
305
+ // ---------------------------------------------------------------------------
306
+ // Main: runInit
307
+ // ---------------------------------------------------------------------------
308
+ async function runInit(options = {}) {
309
+ const paths = options.paths ?? new paths_1.VessPaths();
310
+ const gatewayUrl = options.gatewayUrl ?? DEFAULT_GATEWAY_URL;
311
+ const forceReinit = options.forceReinit ?? false;
312
+ // Validate gateway URL
313
+ try {
314
+ const parsed = new URL(gatewayUrl);
315
+ if (!['http:', 'https:'].includes(parsed.protocol)) {
316
+ throw new Error('Gateway URL must use http or https protocol');
317
+ }
318
+ }
319
+ catch (err) {
320
+ if (err instanceof TypeError) {
321
+ throw new Error(`Invalid gateway URL: ${gatewayUrl}`);
322
+ }
323
+ throw err;
324
+ }
325
+ // Track whether baseDir pre-existed (for rollback decision)
326
+ const baseDirExisted = fs.existsSync(paths.baseDir);
327
+ // 1. Ensure ~/.vess directory exists
328
+ if (!baseDirExisted) {
329
+ fs.mkdirSync(paths.baseDir, { recursive: true });
330
+ }
331
+ // 2. Check if already initialized
332
+ const km = new key_manager_1.KeyManager();
333
+ const existingKey = km.getRootKey();
334
+ if (existingKey !== null) {
335
+ if (!forceReinit) {
336
+ (0, cli_utils_1.log)('VESS is already initialized. Skipping.');
337
+ return;
338
+ }
339
+ (0, cli_utils_1.log)('VESS is already initialized. Re-initializing...');
340
+ km.deleteRootKey();
341
+ km.deleteSessionToken();
342
+ // Uninstall existing daemon service before re-init
343
+ try {
344
+ await service_manager_1.ServiceManager.uninstall({ homeDir: options.homeDir });
345
+ }
346
+ catch {
347
+ /* best-effort — service may not be installed */
348
+ }
349
+ }
350
+ // Show prerequisites banner (skip in non-interactive / test mode)
351
+ if (!options.skipPrompt) {
352
+ displayPrerequisitesBanner();
353
+ }
354
+ let db = null;
355
+ try {
356
+ // 3. Generate root key pair
357
+ (0, cli_utils_1.log)('Generating root DID key pair...');
358
+ const { did: rootDid, privateKeyJwk, publicKeyJwk } = await did_manager_1.DIDManager.generateRootDID();
359
+ // 4. Store private key in OS Keychain
360
+ km.storeRootKey(privateKeyJwk);
361
+ // 5. Initialize SQLite database
362
+ db = (0, sqlite_1.openDatabase)(paths.walletDb);
363
+ (0, sqlite_1.initSchema)(db);
364
+ // 6. Run Device Code authentication
365
+ (0, cli_utils_1.log)('Starting device enrollment...');
366
+ const enrollManager = new ai_identity_1.DeviceEnrollManager(gatewayUrl);
367
+ let cleanupBrowserPrompt;
368
+ let result;
369
+ try {
370
+ result = await enrollManager.enrollAndWait({
371
+ rootDid,
372
+ publicKeyJwk: publicKeyJwk,
373
+ }, info => {
374
+ (0, cli_utils_1.log)('');
375
+ (0, cli_utils_1.log)('=== Device Verification Required ===');
376
+ (0, cli_utils_1.log)(`Open this URL: ${info.verificationUrl}`);
377
+ (0, cli_utils_1.log)(`Enter code: ${info.userCode}`);
378
+ (0, cli_utils_1.log)('');
379
+ (0, cli_utils_1.log)('Waiting for approval...');
380
+ cleanupBrowserPrompt = (0, cli_utils_1.promptEnterToOpenBrowser)(info.verificationUrl);
381
+ });
382
+ }
383
+ finally {
384
+ cleanupBrowserPrompt?.();
385
+ }
386
+ // Check result
387
+ if (result.status !== 'approved') {
388
+ throw new Error(`Device enrollment ${result.status}. Please try again with 'vess init'.`);
389
+ }
390
+ // 7. Store session token
391
+ if (result.deviceSessionToken) {
392
+ km.storeSessionToken(result.deviceSessionToken);
393
+ }
394
+ // 8. Fetch projects from Gateway and set defaultProjectId
395
+ let defaultProjectId;
396
+ if (result.deviceSessionToken) {
397
+ defaultProjectId = await fetchAndStoreProjects(db, gatewayUrl, result.deviceSessionToken, options.skipPrompt);
398
+ }
399
+ db.close();
400
+ db = null; // Mark as closed to prevent double-close in rollback
401
+ // 9. Save config (with defaultProjectId if available)
402
+ (0, config_1.saveConfig)(paths.configFile, {
403
+ gatewayUrl,
404
+ rootDid,
405
+ defaultProjectId,
406
+ });
407
+ // 10. Create default policy.json
408
+ if (!fs.existsSync(paths.policyFile)) {
409
+ fs.writeFileSync(paths.policyFile, JSON.stringify(DEFAULT_POLICY, null, 2), 'utf-8');
410
+ fs.chmodSync(paths.policyFile, 0o600);
411
+ }
412
+ // 11. Daemon setup (unless --no-daemon)
413
+ const daemonInstalled = await setupDaemon(options);
414
+ // 12. Claude Code MCP registration (unless --no-install)
415
+ if (!options.noInstall) {
416
+ (0, cli_utils_1.log)('');
417
+ (0, cli_utils_1.log)('Registering with Claude Code...');
418
+ try {
419
+ await (0, install_1.runInstall)({
420
+ paths,
421
+ claudeConfigPath: options.claudeConfigPath,
422
+ skipConfirm: true,
423
+ daemonMode: daemonInstalled,
424
+ daemonPort: constants_1.DEFAULT_DAEMON_PORT,
425
+ });
426
+ }
427
+ catch (err) {
428
+ (0, cli_utils_1.log)(` Could not register automatically: ${err instanceof Error ? err.message : String(err)}`);
429
+ (0, cli_utils_1.log)(' Run "vess mcp register" to register manually.');
430
+ }
431
+ }
432
+ // 13. Done
433
+ displayCompletionBanner(rootDid, defaultProjectId, daemonInstalled, paths.configFile);
434
+ }
435
+ catch (err) {
436
+ rollbackInit({ km, db, paths, baseDirExisted, homeDir: options.homeDir });
437
+ throw err;
438
+ }
439
+ }
440
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { VessPaths } from '../config/paths';
2
+ export interface InstallOptions {
3
+ paths?: VessPaths;
4
+ /** Override Claude Code config path (for testing) */
5
+ claudeConfigPath?: string;
6
+ /** Skip interactive confirmation (for testing or programmatic use) */
7
+ skipConfirm?: boolean;
8
+ /** Force daemon (HTTP) or stdio mode. When undefined, auto-detect from daemon PID. */
9
+ daemonMode?: boolean;
10
+ /** Port to use for daemon HTTP mode (default: 3100). Only used when daemonMode=true. */
11
+ daemonPort?: number;
12
+ }
13
+ export declare function runInstall(options?: InstallOptions): Promise<void>;
14
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/cli/install.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAM3C,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,SAAS,CAAA;IACjB,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,sEAAsE;IACtE,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,sFAAsF;IACtF,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,wFAAwF;IACxF,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAqCD,wBAAsB,UAAU,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+H5E"}
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.runInstall = runInstall;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const os = __importStar(require("os"));
40
+ const readline = __importStar(require("node:readline/promises"));
41
+ const paths_1 = require("../config/paths");
42
+ const constants_1 = require("../config/constants");
43
+ const config_1 = require("../config/config");
44
+ const cli_utils_1 = require("./cli-utils");
45
+ const daemon_utils_1 = require("./daemon-utils");
46
+ function getDefaultClaudeConfigPath() {
47
+ return path.join(os.homedir(), '.claude.json');
48
+ }
49
+ /**
50
+ * Detect if daemon is running and return the appropriate MCP entry.
51
+ */
52
+ function detectMcpEntry(baseDir) {
53
+ const pidFile = path.join(baseDir, 'daemon.pid');
54
+ const portFile = path.join(baseDir, 'daemon.port');
55
+ const pid = (0, daemon_utils_1.readPidFile)(pidFile);
56
+ const port = (0, daemon_utils_1.readPortFile)(portFile);
57
+ if (pid !== null && (0, daemon_utils_1.isDaemonRunning)(pid) && port !== null) {
58
+ return {
59
+ url: `http://127.0.0.1:${port}/mcp`,
60
+ type: 'http',
61
+ };
62
+ }
63
+ return {
64
+ command: 'vess',
65
+ args: ['start'],
66
+ type: 'stdio',
67
+ };
68
+ }
69
+ async function runInstall(options = {}) {
70
+ const paths = options.paths ?? new paths_1.VessPaths();
71
+ const claudeConfigPath = options.claudeConfigPath ?? getDefaultClaudeConfigPath();
72
+ // 1. Check if vess init has been run
73
+ if (!fs.existsSync(paths.configFile)) {
74
+ throw new Error('VESS is not initialized. Run "vess init" first.');
75
+ }
76
+ const config = (0, config_1.loadConfig)(paths.configFile);
77
+ if (!config.rootDid) {
78
+ throw new Error('VESS is not initialized (missing rootDid). Run "vess init" first.');
79
+ }
80
+ // 2. Detect daemon mode and build MCP entry
81
+ let mcpEntry;
82
+ if (options.daemonMode === true) {
83
+ const port = options.daemonPort ?? constants_1.DEFAULT_DAEMON_PORT;
84
+ mcpEntry = { url: `http://127.0.0.1:${port}/mcp`, type: 'http' };
85
+ }
86
+ else if (options.daemonMode === false) {
87
+ mcpEntry = { command: 'vess', args: ['start'], type: 'stdio' };
88
+ }
89
+ else {
90
+ mcpEntry = detectMcpEntry(paths.baseDir);
91
+ }
92
+ const isDaemonMode = mcpEntry.type === 'http';
93
+ // 3. Detect Claude Code installation
94
+ if (!fs.existsSync(claudeConfigPath)) {
95
+ (0, cli_utils_1.log)('');
96
+ (0, cli_utils_1.log)('Claude Code config not found at: ' + claudeConfigPath);
97
+ (0, cli_utils_1.log)('');
98
+ (0, cli_utils_1.log)('To register VESS manually, add the following to your Claude Code config:');
99
+ (0, cli_utils_1.log)('');
100
+ if (isDaemonMode) {
101
+ (0, cli_utils_1.log)(' "mcpServers": {');
102
+ (0, cli_utils_1.log)(' "vess": {');
103
+ (0, cli_utils_1.log)(` "url": "${mcpEntry.url}",`);
104
+ (0, cli_utils_1.log)(' "type": "http"');
105
+ (0, cli_utils_1.log)(' }');
106
+ (0, cli_utils_1.log)(' }');
107
+ }
108
+ else {
109
+ (0, cli_utils_1.log)(' "mcpServers": {');
110
+ (0, cli_utils_1.log)(' "vess": {');
111
+ (0, cli_utils_1.log)(' "command": "vess",');
112
+ (0, cli_utils_1.log)(' "args": ["start"],');
113
+ (0, cli_utils_1.log)(' "type": "stdio"');
114
+ (0, cli_utils_1.log)(' }');
115
+ (0, cli_utils_1.log)(' }');
116
+ }
117
+ (0, cli_utils_1.log)('');
118
+ return;
119
+ }
120
+ // 4. Read existing config
121
+ const rawConfig = fs.readFileSync(claudeConfigPath, 'utf-8');
122
+ const claudeConfig = JSON.parse(rawConfig);
123
+ // 5. Check if vess MCP server is already registered
124
+ const mcpServers = (claudeConfig.mcpServers ?? {});
125
+ if (mcpServers.vess) {
126
+ (0, cli_utils_1.log)('VESS MCP server is already registered in Claude Code config.');
127
+ return;
128
+ }
129
+ // 6. Build updated config
130
+ const updatedMcpServers = { ...mcpServers, vess: mcpEntry };
131
+ const updatedConfig = { ...claudeConfig, mcpServers: updatedMcpServers };
132
+ // 7. Create backup
133
+ const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
134
+ const backupPath = claudeConfigPath + '.backup-' + timestamp;
135
+ fs.writeFileSync(backupPath, rawConfig, { encoding: 'utf-8', mode: 0o600 });
136
+ (0, cli_utils_1.log)('Backup created: ' + backupPath);
137
+ // 8. Show diff
138
+ (0, cli_utils_1.log)('');
139
+ (0, cli_utils_1.log)('The following changes will be made to ' + claudeConfigPath + ':');
140
+ (0, cli_utils_1.log)('');
141
+ if (isDaemonMode) {
142
+ (0, cli_utils_1.log)(' Mode: daemon (http)');
143
+ (0, cli_utils_1.log)(' Adding MCP server entry:');
144
+ (0, cli_utils_1.log)(' "vess": {');
145
+ (0, cli_utils_1.log)(` "url": "${mcpEntry.url}",`);
146
+ (0, cli_utils_1.log)(' "type": "http"');
147
+ (0, cli_utils_1.log)(' }');
148
+ }
149
+ else {
150
+ (0, cli_utils_1.log)(' Mode: stdio');
151
+ (0, cli_utils_1.log)(' Adding MCP server entry:');
152
+ (0, cli_utils_1.log)(' "vess": {');
153
+ (0, cli_utils_1.log)(' "command": "vess",');
154
+ (0, cli_utils_1.log)(' "args": ["start"],');
155
+ (0, cli_utils_1.log)(' "type": "stdio"');
156
+ (0, cli_utils_1.log)(' }');
157
+ }
158
+ (0, cli_utils_1.log)('');
159
+ // 9. Ask for confirmation (unless skipConfirm)
160
+ if (!options.skipConfirm) {
161
+ const rl = readline.createInterface({
162
+ input: process.stdin,
163
+ output: process.stderr,
164
+ });
165
+ try {
166
+ const confirmed = await (0, cli_utils_1.promptYesNo)(rl, 'Apply these changes?');
167
+ if (!confirmed) {
168
+ (0, cli_utils_1.log)('Installation cancelled.');
169
+ return;
170
+ }
171
+ }
172
+ finally {
173
+ rl.close();
174
+ }
175
+ }
176
+ // 10. Write updated config
177
+ fs.writeFileSync(claudeConfigPath, JSON.stringify(updatedConfig, null, 2), 'utf-8');
178
+ // 11. Success message
179
+ (0, cli_utils_1.log)('');
180
+ (0, cli_utils_1.log)('VESS MCP server registered successfully in Claude Code!');
181
+ (0, cli_utils_1.log)('');
182
+ (0, cli_utils_1.log)('Next steps:');
183
+ (0, cli_utils_1.log)(' 1. Restart Claude Code to pick up the new MCP server');
184
+ (0, cli_utils_1.log)(' 2. Run "vess status" to verify everything is working');
185
+ }
186
+ //# sourceMappingURL=install.js.map