@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,207 @@
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.runDaemonStart = runDaemonStart;
37
+ exports.runDaemonStop = runDaemonStop;
38
+ /**
39
+ * `vess daemon` CLI command — start/stop for daemon mode.
40
+ *
41
+ * Daemon start flow:
42
+ * 1. Initialize runtime (config, DB, policies, wallet, audit, engine factories)
43
+ * 2. Start HTTP transport with runtime.createMcpServer as factory
44
+ * 3. Write PID to ~/.vess/daemon.pid
45
+ * 4. Write port to ~/.vess/daemon.port
46
+ * 5. Graceful shutdown on SIGINT/SIGTERM
47
+ */
48
+ const path = __importStar(require("node:path"));
49
+ const paths_1 = require("../config/paths");
50
+ const constants_1 = require("../config/constants");
51
+ const config_1 = require("../config/config");
52
+ const runtime_1 = require("../core/runtime");
53
+ const http_transport_1 = require("../adapter/mcp/http-transport");
54
+ const key_manager_1 = require("../identity/key-manager");
55
+ const daemon_utils_1 = require("./daemon-utils");
56
+ const error_handlers_1 = require("./error-handlers");
57
+ const DEFAULT_PORT = constants_1.DEFAULT_DAEMON_PORT;
58
+ const DEFAULT_HOST = '127.0.0.1';
59
+ function getPidFilePath() {
60
+ const paths = new paths_1.VessPaths();
61
+ return path.join(paths.baseDir, 'daemon.pid');
62
+ }
63
+ function getPortFilePath() {
64
+ const paths = new paths_1.VessPaths();
65
+ return path.join(paths.baseDir, 'daemon.port');
66
+ }
67
+ /**
68
+ * Start the daemon in foreground mode.
69
+ */
70
+ async function runDaemonStart(opts) {
71
+ const port = opts.port ?? DEFAULT_PORT;
72
+ const host = opts.host ?? DEFAULT_HOST;
73
+ // Validate host — MCP endpoint has no authentication, must only listen on loopback
74
+ const LOOPBACK_HOSTS = ['127.0.0.1', '::1', 'localhost'];
75
+ if (!LOOPBACK_HOSTS.includes(host)) {
76
+ console.error(`Error: Refusing to bind to ${host}. ` +
77
+ 'The MCP endpoint has no authentication and MUST only listen on loopback addresses (127.0.0.1).');
78
+ process.exit(1);
79
+ }
80
+ // Validate port
81
+ if (!Number.isInteger(port) || port < 1024 || port > 65535) {
82
+ console.error(`Error: Invalid port ${port}. Must be an integer between 1024 and 65535.`);
83
+ process.exit(1);
84
+ }
85
+ const pidFile = getPidFilePath();
86
+ const portFile = getPortFilePath();
87
+ // Check if daemon is already running
88
+ const existingPid = (0, daemon_utils_1.readPidFile)(pidFile);
89
+ if (existingPid !== null && (0, daemon_utils_1.isDaemonRunning)(existingPid)) {
90
+ const existingPort = (0, daemon_utils_1.readPortFile)(portFile);
91
+ console.error(`Daemon is already running (PID ${existingPid}` +
92
+ (existingPort ? `, port ${existingPort}` : '') +
93
+ '). Use "vess daemon stop" to stop it.');
94
+ process.exit(1);
95
+ }
96
+ // Clean up stale PID file
97
+ if (existingPid !== null) {
98
+ (0, daemon_utils_1.removePidFile)(pidFile);
99
+ (0, daemon_utils_1.removePortFile)(portFile);
100
+ }
101
+ // Initialize runtime
102
+ const runtime = await (0, runtime_1.initializeRuntime)();
103
+ // Start HTTP transport with async MCP server factory.
104
+ // All daemon sessions share the same clientName so they resolve to one Agent DID.
105
+ // TODO: Extract actual clientInfo from MCP initialize handshake when available.
106
+ const defaultClientName = 'claude-code';
107
+ // Pre-create auth-check dependencies once (avoid re-instantiation on every health check)
108
+ const km = new key_manager_1.KeyManager();
109
+ const vessPaths = new paths_1.VessPaths();
110
+ const config = (0, config_1.loadConfig)(vessPaths.configFile);
111
+ let httpHandle;
112
+ try {
113
+ httpHandle = await (0, http_transport_1.startHttpTransport)(async () => {
114
+ const { server, setClientInfo } = await runtime.createMcpServer(defaultClientName);
115
+ return { server, onClientInfo: setClientInfo };
116
+ }, port, host, {
117
+ healthCheck: () => {
118
+ // Check DB accessibility
119
+ let dbOk = false;
120
+ try {
121
+ runtime.db.prepare('SELECT 1').get();
122
+ dbOk = true;
123
+ }
124
+ catch {
125
+ // DB is not accessible
126
+ }
127
+ // Check if session token exists (auth proxy)
128
+ let authOk = false;
129
+ try {
130
+ authOk = !!(km.getSessionToken() || config.deviceSessionToken);
131
+ }
132
+ catch {
133
+ // Auth check failed
134
+ }
135
+ return {
136
+ auth: authOk,
137
+ db: dbOk,
138
+ lastSync: runtime.syncScheduler.getLastSyncTime(),
139
+ uptime: process.uptime(),
140
+ };
141
+ },
142
+ });
143
+ }
144
+ catch (err) {
145
+ runtime.cleanup();
146
+ throw err;
147
+ }
148
+ // Write PID and port files
149
+ (0, daemon_utils_1.writePidFile)(pidFile, process.pid);
150
+ (0, daemon_utils_1.writePortFile)(portFile, port);
151
+ console.error(`VESS daemon started on ${host}:${port} (PID ${process.pid})`);
152
+ // Graceful shutdown (guarded against concurrent invocation from signals + uncaught exceptions)
153
+ let isShuttingDown = false;
154
+ const shutdown = async () => {
155
+ if (isShuttingDown)
156
+ return;
157
+ isShuttingDown = true;
158
+ process.stderr.write('Shutting down VESS daemon...\n');
159
+ httpHandle.close();
160
+ // Give in-flight requests a moment to complete
161
+ await new Promise(resolve => setTimeout(resolve, 1000));
162
+ runtime.cleanup();
163
+ (0, daemon_utils_1.removePidFile)(pidFile);
164
+ (0, daemon_utils_1.removePortFile)(portFile);
165
+ process.exit(0);
166
+ };
167
+ // Install global error handlers to prevent silent crashes
168
+ (0, error_handlers_1.installGlobalErrorHandlers)({
169
+ onFatalError: () => {
170
+ shutdown().catch(() => process.exit(1));
171
+ },
172
+ });
173
+ process.on('SIGINT', () => { shutdown(); });
174
+ process.on('SIGTERM', () => { shutdown(); });
175
+ }
176
+ /**
177
+ * Stop the running daemon.
178
+ */
179
+ function runDaemonStop() {
180
+ const pidFile = getPidFilePath();
181
+ const portFile = getPortFilePath();
182
+ const pid = (0, daemon_utils_1.readPidFile)(pidFile);
183
+ if (pid === null) {
184
+ console.error('No daemon PID file found. Daemon may not be running.');
185
+ process.exit(1);
186
+ }
187
+ if (!(0, daemon_utils_1.isDaemonRunning)(pid)) {
188
+ console.error(`Daemon process ${pid} is not running. Cleaning up stale PID file.`);
189
+ (0, daemon_utils_1.removePidFile)(pidFile);
190
+ (0, daemon_utils_1.removePortFile)(portFile);
191
+ return;
192
+ }
193
+ // Send SIGTERM to the daemon process
194
+ try {
195
+ process.kill(pid, 'SIGTERM');
196
+ console.error(`Sent SIGTERM to daemon (PID ${pid}).`);
197
+ }
198
+ catch (err) {
199
+ console.error(`Failed to stop daemon: ${err instanceof Error ? err.message : String(err)}`);
200
+ process.exit(1);
201
+ }
202
+ // Clean up PID/port files (daemon should also clean up on shutdown,
203
+ // but we do it here too in case it doesn't)
204
+ (0, daemon_utils_1.removePidFile)(pidFile);
205
+ (0, daemon_utils_1.removePortFile)(portFile);
206
+ }
207
+ //# sourceMappingURL=daemon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/cli/daemon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function runDoctor(): Promise<void>;
2
+ //# sourceMappingURL=doctor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"AAaA,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAgG/C"}
@@ -0,0 +1,135 @@
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.runDoctor = runDoctor;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const os = __importStar(require("os"));
40
+ const paths_1 = require("../config/paths");
41
+ const config_1 = require("../config/config");
42
+ const key_manager_1 = require("../identity/key-manager");
43
+ async function runDoctor() {
44
+ const paths = new paths_1.VessPaths();
45
+ const results = [];
46
+ // 1. Config file
47
+ results.push({
48
+ name: 'Config file (~/.vess/config.json)',
49
+ passed: fs.existsSync(paths.configFile),
50
+ });
51
+ // 2. Policy file
52
+ results.push({
53
+ name: 'Policy file (~/.vess/policy.json)',
54
+ passed: fs.existsSync(paths.policyFile),
55
+ });
56
+ // 3. Wallet database
57
+ results.push({
58
+ name: 'Wallet database (~/.vess/wallet.db)',
59
+ passed: fs.existsSync(paths.walletDb),
60
+ });
61
+ // 4. Root key in keychain
62
+ const keyManager = new key_manager_1.KeyManager();
63
+ let rootKeyExists = false;
64
+ try {
65
+ rootKeyExists = keyManager.getRootKey() !== null;
66
+ }
67
+ catch {
68
+ rootKeyExists = false;
69
+ }
70
+ results.push({
71
+ name: 'Root key in OS Keychain',
72
+ passed: rootKeyExists,
73
+ });
74
+ // 5. Device session token
75
+ const config = (0, config_1.loadConfig)(paths.configFile);
76
+ const hasSessionToken = keyManager.getSessionToken() !== null || !!config.deviceSessionToken;
77
+ results.push({
78
+ name: 'Device session token',
79
+ passed: hasSessionToken,
80
+ });
81
+ // 6. Gateway connectivity
82
+ let gatewayOk = false;
83
+ try {
84
+ const response = await fetch(`${config.gatewayUrl}/health`, {
85
+ signal: AbortSignal.timeout(5000),
86
+ });
87
+ gatewayOk = response.ok;
88
+ }
89
+ catch {
90
+ gatewayOk = false;
91
+ }
92
+ results.push({
93
+ name: `Gateway connectivity (${config.gatewayUrl})`,
94
+ passed: gatewayOk,
95
+ detail: gatewayOk ? undefined : 'timeout or unreachable',
96
+ });
97
+ // 7. Claude Code MCP registration
98
+ const claudeConfigPaths = [
99
+ path.join(os.homedir(), '.claude.json'), // matches install.ts
100
+ ];
101
+ let claudeRegistered = false;
102
+ for (const p of claudeConfigPaths) {
103
+ if (fs.existsSync(p)) {
104
+ try {
105
+ const content = fs.readFileSync(p, 'utf-8');
106
+ if (content.includes('vess')) {
107
+ claudeRegistered = true;
108
+ break;
109
+ }
110
+ }
111
+ catch { }
112
+ }
113
+ }
114
+ results.push({
115
+ name: 'Claude Code MCP registration',
116
+ passed: claudeRegistered,
117
+ detail: claudeRegistered ? undefined : 'Add vess to Claude Code MCP config',
118
+ });
119
+ // Output
120
+ console.log('\nVESS Doctor');
121
+ console.log('-----------');
122
+ for (const r of results) {
123
+ const status = r.passed ? '[PASS]' : '[FAIL]';
124
+ const detail = r.detail ? ` (${r.detail})` : '';
125
+ console.log(`${status} ${r.name}${detail}`);
126
+ }
127
+ const failCount = results.filter(r => !r.passed).length;
128
+ if (failCount > 0) {
129
+ console.log(`\n${failCount} check(s) failed. Run "vess init" to fix setup issues.`);
130
+ }
131
+ else {
132
+ console.log('\nAll checks passed!');
133
+ }
134
+ }
135
+ //# sourceMappingURL=doctor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/cli/doctor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface EnvDeleteOptions {
2
+ profile: string;
3
+ keys?: string[];
4
+ }
5
+ export declare function runEnvDelete(options: EnvDeleteOptions): Promise<void>;
6
+ //# sourceMappingURL=env-delete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-delete.d.ts","sourceRoot":"","sources":["../../src/cli/env-delete.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;CAChB;AAED,wBAAsB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CA+E3E"}
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runEnvDelete = runEnvDelete;
4
+ const key_manager_1 = require("../identity/key-manager");
5
+ const cli_db_1 = require("./cli-db");
6
+ const cli_utils_1 = require("./cli-utils");
7
+ const user_authenticator_1 = require("../auth/user-authenticator");
8
+ async function runEnvDelete(options) {
9
+ const { profile, keys: targetKeys } = options;
10
+ // 1. Load profile keys
11
+ const ctx = (0, cli_db_1.openProfileStore)('env delete');
12
+ if (!ctx)
13
+ return;
14
+ const { db, profileStore } = ctx;
15
+ try {
16
+ const existingKeys = profileStore.listKeys(profile);
17
+ if (existingKeys.length === 0) {
18
+ throw new Error(`No secrets found for profile '${profile}'`);
19
+ }
20
+ // 2. Determine which keys to delete
21
+ const existingKeyNames = new Set(existingKeys.map(k => k.keyName));
22
+ let keysToDelete;
23
+ if (targetKeys) {
24
+ keysToDelete = [];
25
+ for (const k of targetKeys) {
26
+ if (existingKeyNames.has(k)) {
27
+ keysToDelete.push(k);
28
+ }
29
+ else {
30
+ (0, cli_utils_1.log)(`[vess] Warning: key '${k}' not found in profile '${profile}', skipping`);
31
+ }
32
+ }
33
+ if (keysToDelete.length === 0) {
34
+ (0, cli_utils_1.log)(`[vess] No matching keys to delete`);
35
+ return;
36
+ }
37
+ }
38
+ else {
39
+ keysToDelete = existingKeys.map(k => k.keyName);
40
+ }
41
+ // 3. Authenticate
42
+ const authenticator = (0, user_authenticator_1.createAuthenticator)();
43
+ const available = await authenticator.isAvailable();
44
+ if (!available) {
45
+ throw new user_authenticator_1.AuthenticationUnavailableError('Authentication is required to delete secrets. Not available on this platform.');
46
+ }
47
+ const action = targetKeys
48
+ ? `delete ${keysToDelete.length} key(s) from profile '${profile}'`
49
+ : `delete all ${keysToDelete.length} keys from profile '${profile}'`;
50
+ (0, cli_utils_1.log)(`[vess] Requesting authentication to ${action}...`);
51
+ await authenticator.authenticate(`VESS wants to ${action}`);
52
+ // 4. Delete from Keychain + metadata
53
+ const keyManager = new key_manager_1.KeyManager();
54
+ let deletedCount = 0;
55
+ let failedCount = 0;
56
+ for (const keyName of keysToDelete) {
57
+ try {
58
+ keyManager.deleteEnvSecret(profile, keyName);
59
+ profileStore.removeKey(profile, keyName);
60
+ deletedCount++;
61
+ }
62
+ catch (err) {
63
+ (0, cli_utils_1.log)(`[vess] Warning: failed to delete '${keyName}': ${err instanceof Error ? err.message : String(err)}`);
64
+ failedCount++;
65
+ }
66
+ }
67
+ // If entire profile deleted, also remove profile-level metadata
68
+ if (!targetKeys && failedCount === 0) {
69
+ profileStore.removeProfile(profile);
70
+ }
71
+ (0, cli_utils_1.log)(`[vess] Deleted ${deletedCount} secret(s) from profile '${profile}'`);
72
+ if (failedCount > 0) {
73
+ (0, cli_utils_1.log)(`[vess] ${failedCount} key(s) failed to delete`);
74
+ }
75
+ }
76
+ finally {
77
+ db.close();
78
+ }
79
+ }
80
+ //# sourceMappingURL=env-delete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-delete.js","sourceRoot":"","sources":["../../src/cli/env-delete.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export interface EnvListOptions {
2
+ profile?: string;
3
+ }
4
+ export declare function runEnvList(options?: EnvListOptions): Promise<void>;
5
+ //# sourceMappingURL=env-list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-list.d.ts","sourceRoot":"","sources":["../../src/cli/env-list.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED,wBAAsB,UAAU,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CAkC5E"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runEnvList = runEnvList;
4
+ const cli_db_1 = require("./cli-db");
5
+ const cli_utils_1 = require("./cli-utils");
6
+ async function runEnvList(options = {}) {
7
+ const ctx = (0, cli_db_1.openProfileStore)('env list');
8
+ if (!ctx)
9
+ return;
10
+ const { db, profileStore } = ctx;
11
+ try {
12
+ if (options.profile) {
13
+ const keys = profileStore.listKeys(options.profile);
14
+ if (keys.length === 0) {
15
+ (0, cli_utils_1.log)(`[vess] No keys found for profile '${options.profile}'`);
16
+ return;
17
+ }
18
+ (0, cli_utils_1.log)(`[vess] Profile: ${options.profile} (${keys.length} keys)`);
19
+ for (const { keyName, backendType } of keys) {
20
+ (0, cli_utils_1.log)(` ${keyName} [${backendType}]`);
21
+ }
22
+ }
23
+ else {
24
+ const profiles = profileStore.listProfiles();
25
+ if (profiles.length === 0) {
26
+ (0, cli_utils_1.log)('[vess] No env profiles found');
27
+ return;
28
+ }
29
+ for (const profile of profiles) {
30
+ const keys = profileStore.listKeys(profile);
31
+ (0, cli_utils_1.log)(`[vess] Profile: ${profile} (${keys.length} keys)`);
32
+ for (const { keyName, backendType } of keys) {
33
+ (0, cli_utils_1.log)(` ${keyName} [${backendType}]`);
34
+ }
35
+ }
36
+ }
37
+ }
38
+ finally {
39
+ db.close();
40
+ }
41
+ }
42
+ //# sourceMappingURL=env-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-list.js","sourceRoot":"","sources":["../../src/cli/env-list.ts"],"names":[],"mappings":";;AAOA,gCAkCC;AAzCD,qCAA2C;AAC3C,2CAAiC;AAM1B,KAAK,UAAU,UAAU,CAAC,UAA0B,EAAE;IAC3D,MAAM,GAAG,GAAG,IAAA,yBAAgB,EAAC,UAAU,CAAC,CAAA;IACxC,IAAI,CAAC,GAAG;QAAE,OAAM;IAEhB,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,GAAG,GAAG,CAAA;IAEhC,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACpB,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;YACnD,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACtB,IAAA,eAAG,EAAC,qCAAqC,OAAO,CAAC,OAAO,GAAG,CAAC,CAAA;gBAC5D,OAAM;YACR,CAAC;YACD,IAAA,eAAG,EAAC,mBAAmB,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC,MAAM,QAAQ,CAAC,CAAA;YAC/D,KAAK,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC;gBAC5C,IAAA,eAAG,EAAC,KAAK,OAAO,MAAM,WAAW,GAAG,CAAC,CAAA;YACvC,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,YAAY,CAAC,YAAY,EAAE,CAAA;YAC5C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,IAAA,eAAG,EAAC,8BAA8B,CAAC,CAAA;gBACnC,OAAM;YACR,CAAC;YACD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAA;gBAC3C,IAAA,eAAG,EAAC,mBAAmB,OAAO,KAAK,IAAI,CAAC,MAAM,QAAQ,CAAC,CAAA;gBACvD,KAAK,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC;oBAC5C,IAAA,eAAG,EAAC,KAAK,OAAO,MAAM,WAAW,GAAG,CAAC,CAAA;gBACvC,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;YAAS,CAAC;QACT,EAAE,CAAC,KAAK,EAAE,CAAA;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,21 @@
1
+ export interface ScriptSelection {
2
+ selected: string[];
3
+ unselected: string[];
4
+ }
5
+ export declare function detectScriptsToWrap(scripts: Record<string, string>): ScriptSelection;
6
+ export declare function wrapPackageJsonScripts(pkgPath: string, scriptNames: string[]): string[];
7
+ export declare function appendClaudeMd(claudeMdPath: string, scriptsWrapped: boolean): 'created' | 'appended' | 'skipped';
8
+ export declare function mergeClaudeHook(settingsDir: string): 'created' | 'merged' | 'skipped';
9
+ export declare function findPackageJsonRoot(startDir: string): string | null;
10
+ export interface PostIntegrationOptions {
11
+ envFileDir: string;
12
+ skipIntegration?: boolean;
13
+ }
14
+ export interface PostIntegrationResult {
15
+ scriptsWrapped: boolean;
16
+ claudeMdResult: 'created' | 'appended' | 'skipped' | 'declined';
17
+ hookResult: 'created' | 'merged' | 'skipped' | 'declined';
18
+ wrappedScriptNames: string[];
19
+ }
20
+ export declare function runPostIntegration(options: PostIntegrationOptions): Promise<PostIntegrationResult>;
21
+ //# sourceMappingURL=env-post-integration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"env-post-integration.d.ts","sourceRoot":"","sources":["../../src/cli/env-post-integration.ts"],"names":[],"mappings":"AAoBA,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,UAAU,EAAE,MAAM,EAAE,CAAA;CACrB;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,eAAe,CA0BpF;AAID,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,EAAE,GACpB,MAAM,EAAE,CAkCV;AA2BD,wBAAgB,cAAc,CAC5B,YAAY,EAAE,MAAM,EACpB,cAAc,EAAE,OAAO,GACtB,SAAS,GAAG,UAAU,GAAG,SAAS,CAepC;AAMD,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAyCrF;AAID,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAWnE;AAID,MAAM,WAAW,sBAAsB;IACrC,UAAU,EAAE,MAAM,CAAA;IAClB,eAAe,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC,cAAc,EAAE,OAAO,CAAA;IACvB,cAAc,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,CAAA;IAC/D,UAAU,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAA;IACzD,kBAAkB,EAAE,MAAM,EAAE,CAAA;CAC7B;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,sBAAsB,GAC9B,OAAO,CAAC,qBAAqB,CAAC,CA0GhC"}