@vigil-guard/vge-cc-guard 0.9.0-beta.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 (527) hide show
  1. package/LICENSE.md +37 -0
  2. package/README.md +441 -0
  3. package/dist/cli.d.ts +3 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +61 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/_lib/install-paths.d.ts +16 -0
  8. package/dist/commands/_lib/install-paths.d.ts.map +1 -0
  9. package/dist/commands/_lib/install-paths.js +46 -0
  10. package/dist/commands/_lib/install-paths.js.map +1 -0
  11. package/dist/commands/_lib/parse-install-flags.d.ts +8 -0
  12. package/dist/commands/_lib/parse-install-flags.d.ts.map +1 -0
  13. package/dist/commands/_lib/parse-install-flags.js +15 -0
  14. package/dist/commands/_lib/parse-install-flags.js.map +1 -0
  15. package/dist/commands/config.d.ts +2 -0
  16. package/dist/commands/config.d.ts.map +1 -0
  17. package/dist/commands/config.js +41 -0
  18. package/dist/commands/config.js.map +1 -0
  19. package/dist/commands/daemon.d.ts +2 -0
  20. package/dist/commands/daemon.d.ts.map +1 -0
  21. package/dist/commands/daemon.js +116 -0
  22. package/dist/commands/daemon.js.map +1 -0
  23. package/dist/commands/doctor.d.ts +2 -0
  24. package/dist/commands/doctor.d.ts.map +1 -0
  25. package/dist/commands/doctor.js +53 -0
  26. package/dist/commands/doctor.js.map +1 -0
  27. package/dist/commands/install-wizard.d.ts +2 -0
  28. package/dist/commands/install-wizard.d.ts.map +1 -0
  29. package/dist/commands/install-wizard.js +85 -0
  30. package/dist/commands/install-wizard.js.map +1 -0
  31. package/dist/commands/install.d.ts +15 -0
  32. package/dist/commands/install.d.ts.map +1 -0
  33. package/dist/commands/install.js +136 -0
  34. package/dist/commands/install.js.map +1 -0
  35. package/dist/commands/reset-session.d.ts +2 -0
  36. package/dist/commands/reset-session.d.ts.map +1 -0
  37. package/dist/commands/reset-session.js +113 -0
  38. package/dist/commands/reset-session.js.map +1 -0
  39. package/dist/commands/uninstall.d.ts +2 -0
  40. package/dist/commands/uninstall.d.ts.map +1 -0
  41. package/dist/commands/uninstall.js +277 -0
  42. package/dist/commands/uninstall.js.map +1 -0
  43. package/dist/daemon/active-conversation-decisions.d.ts +9 -0
  44. package/dist/daemon/active-conversation-decisions.d.ts.map +1 -0
  45. package/dist/daemon/active-conversation-decisions.js +58 -0
  46. package/dist/daemon/active-conversation-decisions.js.map +1 -0
  47. package/dist/daemon/allowlist.d.ts +2 -0
  48. package/dist/daemon/allowlist.d.ts.map +1 -0
  49. package/dist/daemon/allowlist.js +118 -0
  50. package/dist/daemon/allowlist.js.map +1 -0
  51. package/dist/daemon/analysis-source.d.ts +17 -0
  52. package/dist/daemon/analysis-source.d.ts.map +1 -0
  53. package/dist/daemon/analysis-source.js +114 -0
  54. package/dist/daemon/analysis-source.js.map +1 -0
  55. package/dist/daemon/ask-dialog.d.ts +23 -0
  56. package/dist/daemon/ask-dialog.d.ts.map +1 -0
  57. package/dist/daemon/ask-dialog.js +114 -0
  58. package/dist/daemon/ask-dialog.js.map +1 -0
  59. package/dist/daemon/attachment-decision-escrow.d.ts +27 -0
  60. package/dist/daemon/attachment-decision-escrow.d.ts.map +1 -0
  61. package/dist/daemon/attachment-decision-escrow.js +34 -0
  62. package/dist/daemon/attachment-decision-escrow.js.map +1 -0
  63. package/dist/daemon/attachment-input-enforcement.d.ts +11 -0
  64. package/dist/daemon/attachment-input-enforcement.d.ts.map +1 -0
  65. package/dist/daemon/attachment-input-enforcement.js +434 -0
  66. package/dist/daemon/attachment-input-enforcement.js.map +1 -0
  67. package/dist/daemon/audit-decisions.d.ts +51 -0
  68. package/dist/daemon/audit-decisions.d.ts.map +1 -0
  69. package/dist/daemon/audit-decisions.js +178 -0
  70. package/dist/daemon/audit-decisions.js.map +1 -0
  71. package/dist/daemon/audit-logger.d.ts +6 -0
  72. package/dist/daemon/audit-logger.d.ts.map +1 -0
  73. package/dist/daemon/audit-logger.js +6 -0
  74. package/dist/daemon/audit-logger.js.map +1 -0
  75. package/dist/daemon/audit-posttool.d.ts +123 -0
  76. package/dist/daemon/audit-posttool.d.ts.map +1 -0
  77. package/dist/daemon/audit-posttool.js +173 -0
  78. package/dist/daemon/audit-posttool.js.map +1 -0
  79. package/dist/daemon/audit-pretool.d.ts +56 -0
  80. package/dist/daemon/audit-pretool.d.ts.map +1 -0
  81. package/dist/daemon/audit-pretool.js +77 -0
  82. package/dist/daemon/audit-pretool.js.map +1 -0
  83. package/dist/daemon/audit-userprompt.d.ts +113 -0
  84. package/dist/daemon/audit-userprompt.d.ts.map +1 -0
  85. package/dist/daemon/audit-userprompt.js +162 -0
  86. package/dist/daemon/audit-userprompt.js.map +1 -0
  87. package/dist/daemon/blocking-decision-triggers.d.ts +5 -0
  88. package/dist/daemon/blocking-decision-triggers.d.ts.map +1 -0
  89. package/dist/daemon/blocking-decision-triggers.js +40 -0
  90. package/dist/daemon/blocking-decision-triggers.js.map +1 -0
  91. package/dist/daemon/cc-contract-auto-probe.d.ts +40 -0
  92. package/dist/daemon/cc-contract-auto-probe.d.ts.map +1 -0
  93. package/dist/daemon/cc-contract-auto-probe.js +101 -0
  94. package/dist/daemon/cc-contract-auto-probe.js.map +1 -0
  95. package/dist/daemon/cc-contract-probe.d.ts +46 -0
  96. package/dist/daemon/cc-contract-probe.d.ts.map +1 -0
  97. package/dist/daemon/cc-contract-probe.js +138 -0
  98. package/dist/daemon/cc-contract-probe.js.map +1 -0
  99. package/dist/daemon/cc-contract-runtime.d.ts +8 -0
  100. package/dist/daemon/cc-contract-runtime.d.ts.map +1 -0
  101. package/dist/daemon/cc-contract-runtime.js +42 -0
  102. package/dist/daemon/cc-contract-runtime.js.map +1 -0
  103. package/dist/daemon/cc-contract-status.d.ts +40 -0
  104. package/dist/daemon/cc-contract-status.d.ts.map +1 -0
  105. package/dist/daemon/cc-contract-status.js +242 -0
  106. package/dist/daemon/cc-contract-status.js.map +1 -0
  107. package/dist/daemon/confidence-router.d.ts +3 -0
  108. package/dist/daemon/confidence-router.d.ts.map +1 -0
  109. package/dist/daemon/confidence-router.js +34 -0
  110. package/dist/daemon/confidence-router.js.map +1 -0
  111. package/dist/daemon/conversation-context.d.ts +28 -0
  112. package/dist/daemon/conversation-context.d.ts.map +1 -0
  113. package/dist/daemon/conversation-context.js +271 -0
  114. package/dist/daemon/conversation-context.js.map +1 -0
  115. package/dist/daemon/conversation-decision-cleanup.d.ts +2 -0
  116. package/dist/daemon/conversation-decision-cleanup.d.ts.map +1 -0
  117. package/dist/daemon/conversation-decision-cleanup.js +22 -0
  118. package/dist/daemon/conversation-decision-cleanup.js.map +1 -0
  119. package/dist/daemon/conversation-decision-escrow.d.ts +20 -0
  120. package/dist/daemon/conversation-decision-escrow.d.ts.map +1 -0
  121. package/dist/daemon/conversation-decision-escrow.js +78 -0
  122. package/dist/daemon/conversation-decision-escrow.js.map +1 -0
  123. package/dist/daemon/conversation-decision-prompt.d.ts +30 -0
  124. package/dist/daemon/conversation-decision-prompt.d.ts.map +1 -0
  125. package/dist/daemon/conversation-decision-prompt.js +250 -0
  126. package/dist/daemon/conversation-decision-prompt.js.map +1 -0
  127. package/dist/daemon/daemon-instance.d.ts +27 -0
  128. package/dist/daemon/daemon-instance.d.ts.map +1 -0
  129. package/dist/daemon/daemon-instance.js +41 -0
  130. package/dist/daemon/daemon-instance.js.map +1 -0
  131. package/dist/daemon/daemon-ipc.d.ts +29 -0
  132. package/dist/daemon/daemon-ipc.d.ts.map +1 -0
  133. package/dist/daemon/daemon-ipc.js +82 -0
  134. package/dist/daemon/daemon-ipc.js.map +1 -0
  135. package/dist/daemon/daemon-supersede.d.ts +3 -0
  136. package/dist/daemon/daemon-supersede.d.ts.map +1 -0
  137. package/dist/daemon/daemon-supersede.js +126 -0
  138. package/dist/daemon/daemon-supersede.js.map +1 -0
  139. package/dist/daemon/debug-logger.d.ts +5 -0
  140. package/dist/daemon/debug-logger.d.ts.map +1 -0
  141. package/dist/daemon/debug-logger.js +247 -0
  142. package/dist/daemon/debug-logger.js.map +1 -0
  143. package/dist/daemon/decision-broker.d.ts +58 -0
  144. package/dist/daemon/decision-broker.d.ts.map +1 -0
  145. package/dist/daemon/decision-broker.js +340 -0
  146. package/dist/daemon/decision-broker.js.map +1 -0
  147. package/dist/daemon/decision-metrics.d.ts +40 -0
  148. package/dist/daemon/decision-metrics.d.ts.map +1 -0
  149. package/dist/daemon/decision-metrics.js +116 -0
  150. package/dist/daemon/decision-metrics.js.map +1 -0
  151. package/dist/daemon/decision-owner.d.ts +10 -0
  152. package/dist/daemon/decision-owner.d.ts.map +1 -0
  153. package/dist/daemon/decision-owner.js +30 -0
  154. package/dist/daemon/decision-owner.js.map +1 -0
  155. package/dist/daemon/decision-routes.d.ts +7 -0
  156. package/dist/daemon/decision-routes.d.ts.map +1 -0
  157. package/dist/daemon/decision-routes.js +104 -0
  158. package/dist/daemon/decision-routes.js.map +1 -0
  159. package/dist/daemon/decision-timeout.d.ts +3 -0
  160. package/dist/daemon/decision-timeout.d.ts.map +1 -0
  161. package/dist/daemon/decision-timeout.js +5 -0
  162. package/dist/daemon/decision-timeout.js.map +1 -0
  163. package/dist/daemon/decision-transition.d.ts +12 -0
  164. package/dist/daemon/decision-transition.d.ts.map +1 -0
  165. package/dist/daemon/decision-transition.js +8 -0
  166. package/dist/daemon/decision-transition.js.map +1 -0
  167. package/dist/daemon/http-server.d.ts +4 -0
  168. package/dist/daemon/http-server.d.ts.map +1 -0
  169. package/dist/daemon/http-server.js +535 -0
  170. package/dist/daemon/http-server.js.map +1 -0
  171. package/dist/daemon/id-validation.d.ts +2 -0
  172. package/dist/daemon/id-validation.d.ts.map +1 -0
  173. package/dist/daemon/id-validation.js +5 -0
  174. package/dist/daemon/id-validation.js.map +1 -0
  175. package/dist/daemon/path-deny.d.ts +14 -0
  176. package/dist/daemon/path-deny.d.ts.map +1 -0
  177. package/dist/daemon/path-deny.js +88 -0
  178. package/dist/daemon/path-deny.js.map +1 -0
  179. package/dist/daemon/posttool-decision-escrow.d.ts +42 -0
  180. package/dist/daemon/posttool-decision-escrow.d.ts.map +1 -0
  181. package/dist/daemon/posttool-decision-escrow.js +349 -0
  182. package/dist/daemon/posttool-decision-escrow.js.map +1 -0
  183. package/dist/daemon/posttool-decision-state.d.ts +65 -0
  184. package/dist/daemon/posttool-decision-state.d.ts.map +1 -0
  185. package/dist/daemon/posttool-decision-state.js +223 -0
  186. package/dist/daemon/posttool-decision-state.js.map +1 -0
  187. package/dist/daemon/posttool-enforcement.d.ts +7 -0
  188. package/dist/daemon/posttool-enforcement.d.ts.map +1 -0
  189. package/dist/daemon/posttool-enforcement.js +511 -0
  190. package/dist/daemon/posttool-enforcement.js.map +1 -0
  191. package/dist/daemon/posttool-render.d.ts +48 -0
  192. package/dist/daemon/posttool-render.d.ts.map +1 -0
  193. package/dist/daemon/posttool-render.js +335 -0
  194. package/dist/daemon/posttool-render.js.map +1 -0
  195. package/dist/daemon/pretool-decision-escrow.d.ts +51 -0
  196. package/dist/daemon/pretool-decision-escrow.d.ts.map +1 -0
  197. package/dist/daemon/pretool-decision-escrow.js +295 -0
  198. package/dist/daemon/pretool-decision-escrow.js.map +1 -0
  199. package/dist/daemon/pretool-url-gate.d.ts +17 -0
  200. package/dist/daemon/pretool-url-gate.d.ts.map +1 -0
  201. package/dist/daemon/pretool-url-gate.js +60 -0
  202. package/dist/daemon/pretool-url-gate.js.map +1 -0
  203. package/dist/daemon/prompt-input-enforcement.d.ts +18 -0
  204. package/dist/daemon/prompt-input-enforcement.d.ts.map +1 -0
  205. package/dist/daemon/prompt-input-enforcement.js +248 -0
  206. package/dist/daemon/prompt-input-enforcement.js.map +1 -0
  207. package/dist/daemon/reply-parser.d.ts +10 -0
  208. package/dist/daemon/reply-parser.d.ts.map +1 -0
  209. package/dist/daemon/reply-parser.js +81 -0
  210. package/dist/daemon/reply-parser.js.map +1 -0
  211. package/dist/daemon/resolve-escalation-route.d.ts +5 -0
  212. package/dist/daemon/resolve-escalation-route.d.ts.map +1 -0
  213. package/dist/daemon/resolve-escalation-route.js +85 -0
  214. package/dist/daemon/resolve-escalation-route.js.map +1 -0
  215. package/dist/daemon/response-cache.d.ts +14 -0
  216. package/dist/daemon/response-cache.d.ts.map +1 -0
  217. package/dist/daemon/response-cache.js +38 -0
  218. package/dist/daemon/response-cache.js.map +1 -0
  219. package/dist/daemon/security-frame.d.ts +14 -0
  220. package/dist/daemon/security-frame.d.ts.map +1 -0
  221. package/dist/daemon/security-frame.js +96 -0
  222. package/dist/daemon/security-frame.js.map +1 -0
  223. package/dist/daemon/session-hook-routes.d.ts +3 -0
  224. package/dist/daemon/session-hook-routes.d.ts.map +1 -0
  225. package/dist/daemon/session-hook-routes.js +66 -0
  226. package/dist/daemon/session-hook-routes.js.map +1 -0
  227. package/dist/daemon/session-state.d.ts +52 -0
  228. package/dist/daemon/session-state.d.ts.map +1 -0
  229. package/dist/daemon/session-state.js +495 -0
  230. package/dist/daemon/session-state.js.map +1 -0
  231. package/dist/daemon/subagent-lifecycle.d.ts +8 -0
  232. package/dist/daemon/subagent-lifecycle.d.ts.map +1 -0
  233. package/dist/daemon/subagent-lifecycle.js +56 -0
  234. package/dist/daemon/subagent-lifecycle.js.map +1 -0
  235. package/dist/daemon/tool-output-redactor.d.ts +13 -0
  236. package/dist/daemon/tool-output-redactor.d.ts.map +1 -0
  237. package/dist/daemon/tool-output-redactor.js +82 -0
  238. package/dist/daemon/tool-output-redactor.js.map +1 -0
  239. package/dist/daemon/tool-policy.d.ts +16 -0
  240. package/dist/daemon/tool-policy.d.ts.map +1 -0
  241. package/dist/daemon/tool-policy.js +60 -0
  242. package/dist/daemon/tool-policy.js.map +1 -0
  243. package/dist/daemon/tool-response-normalizer.d.ts +11 -0
  244. package/dist/daemon/tool-response-normalizer.d.ts.map +1 -0
  245. package/dist/daemon/tool-response-normalizer.js +67 -0
  246. package/dist/daemon/tool-response-normalizer.js.map +1 -0
  247. package/dist/daemon/truncate.d.ts +3 -0
  248. package/dist/daemon/truncate.d.ts.map +1 -0
  249. package/dist/daemon/truncate.js +22 -0
  250. package/dist/daemon/truncate.js.map +1 -0
  251. package/dist/daemon/url-access-baseline.d.ts +46 -0
  252. package/dist/daemon/url-access-baseline.d.ts.map +1 -0
  253. package/dist/daemon/url-access-baseline.js +154 -0
  254. package/dist/daemon/url-access-baseline.js.map +1 -0
  255. package/dist/daemon/url-block-decisions.d.ts +27 -0
  256. package/dist/daemon/url-block-decisions.d.ts.map +1 -0
  257. package/dist/daemon/url-block-decisions.js +100 -0
  258. package/dist/daemon/url-block-decisions.js.map +1 -0
  259. package/dist/daemon/url-extractor.d.ts +7 -0
  260. package/dist/daemon/url-extractor.d.ts.map +1 -0
  261. package/dist/daemon/url-extractor.js +101 -0
  262. package/dist/daemon/url-extractor.js.map +1 -0
  263. package/dist/daemon/userprompt-decision-escrow.d.ts +45 -0
  264. package/dist/daemon/userprompt-decision-escrow.d.ts.map +1 -0
  265. package/dist/daemon/userprompt-decision-escrow.js +248 -0
  266. package/dist/daemon/userprompt-decision-escrow.js.map +1 -0
  267. package/dist/daemon/vge-client.d.ts +64 -0
  268. package/dist/daemon/vge-client.d.ts.map +1 -0
  269. package/dist/daemon/vge-client.js +453 -0
  270. package/dist/daemon/vge-client.js.map +1 -0
  271. package/dist/daemon/vge-connectivity.d.ts +27 -0
  272. package/dist/daemon/vge-connectivity.d.ts.map +1 -0
  273. package/dist/daemon/vge-connectivity.js +214 -0
  274. package/dist/daemon/vge-connectivity.js.map +1 -0
  275. package/dist/daemon/vge-health-route.d.ts +4 -0
  276. package/dist/daemon/vge-health-route.d.ts.map +1 -0
  277. package/dist/daemon/vge-health-route.js +107 -0
  278. package/dist/daemon/vge-health-route.js.map +1 -0
  279. package/dist/daemon/vge-overload-backpressure.d.ts +51 -0
  280. package/dist/daemon/vge-overload-backpressure.d.ts.map +1 -0
  281. package/dist/daemon/vge-overload-backpressure.js +79 -0
  282. package/dist/daemon/vge-overload-backpressure.js.map +1 -0
  283. package/dist/daemon/vge-scan-failure-policy.d.ts +8 -0
  284. package/dist/daemon/vge-scan-failure-policy.d.ts.map +1 -0
  285. package/dist/daemon/vge-scan-failure-policy.js +12 -0
  286. package/dist/daemon/vge-scan-failure-policy.js.map +1 -0
  287. package/dist/shared/audit-writer.d.ts +9 -0
  288. package/dist/shared/audit-writer.d.ts.map +1 -0
  289. package/dist/shared/audit-writer.js +72 -0
  290. package/dist/shared/audit-writer.js.map +1 -0
  291. package/dist/shared/blocking-decision-choices.d.ts +13 -0
  292. package/dist/shared/blocking-decision-choices.d.ts.map +1 -0
  293. package/dist/shared/blocking-decision-choices.js +40 -0
  294. package/dist/shared/blocking-decision-choices.js.map +1 -0
  295. package/dist/shared/blocking-decision-reply.d.ts +13 -0
  296. package/dist/shared/blocking-decision-reply.d.ts.map +1 -0
  297. package/dist/shared/blocking-decision-reply.js +78 -0
  298. package/dist/shared/blocking-decision-reply.js.map +1 -0
  299. package/dist/shared/build-stamp.d.ts +7 -0
  300. package/dist/shared/build-stamp.d.ts.map +1 -0
  301. package/dist/shared/build-stamp.js +23 -0
  302. package/dist/shared/build-stamp.js.map +1 -0
  303. package/dist/shared/config-io.d.ts +41 -0
  304. package/dist/shared/config-io.d.ts.map +1 -0
  305. package/dist/shared/config-io.js +105 -0
  306. package/dist/shared/config-io.js.map +1 -0
  307. package/dist/shared/config-schema.d.ts +467 -0
  308. package/dist/shared/config-schema.d.ts.map +1 -0
  309. package/dist/shared/config-schema.js +281 -0
  310. package/dist/shared/config-schema.js.map +1 -0
  311. package/dist/shared/daemon-token.d.ts +7 -0
  312. package/dist/shared/daemon-token.d.ts.map +1 -0
  313. package/dist/shared/daemon-token.js +45 -0
  314. package/dist/shared/daemon-token.js.map +1 -0
  315. package/dist/shared/detect-os-user.d.ts +8 -0
  316. package/dist/shared/detect-os-user.d.ts.map +1 -0
  317. package/dist/shared/detect-os-user.js +34 -0
  318. package/dist/shared/detect-os-user.js.map +1 -0
  319. package/dist/shared/effective-client-id.d.ts +6 -0
  320. package/dist/shared/effective-client-id.d.ts.map +1 -0
  321. package/dist/shared/effective-client-id.js +22 -0
  322. package/dist/shared/effective-client-id.js.map +1 -0
  323. package/dist/shared/ipc-address.d.ts +10 -0
  324. package/dist/shared/ipc-address.d.ts.map +1 -0
  325. package/dist/shared/ipc-address.js +33 -0
  326. package/dist/shared/ipc-address.js.map +1 -0
  327. package/dist/shared/ipc-protocol.d.ts +60 -0
  328. package/dist/shared/ipc-protocol.d.ts.map +1 -0
  329. package/dist/shared/ipc-protocol.js +2 -0
  330. package/dist/shared/ipc-protocol.js.map +1 -0
  331. package/dist/shared/path-match.d.ts +4 -0
  332. package/dist/shared/path-match.d.ts.map +1 -0
  333. package/dist/shared/path-match.js +15 -0
  334. package/dist/shared/path-match.js.map +1 -0
  335. package/dist/shared/private-file.d.ts +17 -0
  336. package/dist/shared/private-file.d.ts.map +1 -0
  337. package/dist/shared/private-file.js +144 -0
  338. package/dist/shared/private-file.js.map +1 -0
  339. package/dist/shared/runtime-lock.d.ts +30 -0
  340. package/dist/shared/runtime-lock.d.ts.map +1 -0
  341. package/dist/shared/runtime-lock.js +142 -0
  342. package/dist/shared/runtime-lock.js.map +1 -0
  343. package/dist/shared/system-ca.d.ts +2 -0
  344. package/dist/shared/system-ca.d.ts.map +1 -0
  345. package/dist/shared/system-ca.js +31 -0
  346. package/dist/shared/system-ca.js.map +1 -0
  347. package/dist/shared/types.d.ts +172 -0
  348. package/dist/shared/types.d.ts.map +1 -0
  349. package/dist/shared/types.js +2 -0
  350. package/dist/shared/types.js.map +1 -0
  351. package/dist/shared/url-allowlist.d.ts +4 -0
  352. package/dist/shared/url-allowlist.d.ts.map +1 -0
  353. package/dist/shared/url-allowlist.js +33 -0
  354. package/dist/shared/url-allowlist.js.map +1 -0
  355. package/dist/shared/url-patterns.d.ts +12 -0
  356. package/dist/shared/url-patterns.d.ts.map +1 -0
  357. package/dist/shared/url-patterns.js +165 -0
  358. package/dist/shared/url-patterns.js.map +1 -0
  359. package/dist/shared/vge-url.d.ts +16 -0
  360. package/dist/shared/vge-url.d.ts.map +1 -0
  361. package/dist/shared/vge-url.js +75 -0
  362. package/dist/shared/vge-url.js.map +1 -0
  363. package/dist/shared/vge-verification.d.ts +18 -0
  364. package/dist/shared/vge-verification.d.ts.map +1 -0
  365. package/dist/shared/vge-verification.js +24 -0
  366. package/dist/shared/vge-verification.js.map +1 -0
  367. package/dist/shim/daemon-start-lock.d.ts +13 -0
  368. package/dist/shim/daemon-start-lock.d.ts.map +1 -0
  369. package/dist/shim/daemon-start-lock.js +26 -0
  370. package/dist/shim/daemon-start-lock.js.map +1 -0
  371. package/dist/shim/index.d.ts +17 -0
  372. package/dist/shim/index.d.ts.map +1 -0
  373. package/dist/shim/index.js +180 -0
  374. package/dist/shim/index.js.map +1 -0
  375. package/dist/shim/inline-resolver-terminal.d.ts +12 -0
  376. package/dist/shim/inline-resolver-terminal.d.ts.map +1 -0
  377. package/dist/shim/inline-resolver-terminal.js +201 -0
  378. package/dist/shim/inline-resolver-terminal.js.map +1 -0
  379. package/dist/shim/inline-resolver-transport.d.ts +15 -0
  380. package/dist/shim/inline-resolver-transport.d.ts.map +1 -0
  381. package/dist/shim/inline-resolver-transport.js +68 -0
  382. package/dist/shim/inline-resolver-transport.js.map +1 -0
  383. package/dist/shim/inline-resolver.d.ts +18 -0
  384. package/dist/shim/inline-resolver.d.ts.map +1 -0
  385. package/dist/shim/inline-resolver.js +152 -0
  386. package/dist/shim/inline-resolver.js.map +1 -0
  387. package/dist/shim/lazy-start.d.ts +2 -0
  388. package/dist/shim/lazy-start.d.ts.map +1 -0
  389. package/dist/shim/lazy-start.js +68 -0
  390. package/dist/shim/lazy-start.js.map +1 -0
  391. package/dist/tui/App.d.ts +7 -0
  392. package/dist/tui/App.d.ts.map +1 -0
  393. package/dist/tui/App.js +62 -0
  394. package/dist/tui/App.js.map +1 -0
  395. package/dist/tui/components/Banner.d.ts +9 -0
  396. package/dist/tui/components/Banner.d.ts.map +1 -0
  397. package/dist/tui/components/Banner.js +29 -0
  398. package/dist/tui/components/Banner.js.map +1 -0
  399. package/dist/tui/components/BlockingDecisionModal.d.ts +11 -0
  400. package/dist/tui/components/BlockingDecisionModal.d.ts.map +1 -0
  401. package/dist/tui/components/BlockingDecisionModal.js +34 -0
  402. package/dist/tui/components/BlockingDecisionModal.js.map +1 -0
  403. package/dist/tui/components/ScreenChrome.d.ts +20 -0
  404. package/dist/tui/components/ScreenChrome.d.ts.map +1 -0
  405. package/dist/tui/components/ScreenChrome.js +30 -0
  406. package/dist/tui/components/ScreenChrome.js.map +1 -0
  407. package/dist/tui/components/SelectList.d.ts +14 -0
  408. package/dist/tui/components/SelectList.d.ts.map +1 -0
  409. package/dist/tui/components/SelectList.js +22 -0
  410. package/dist/tui/components/SelectList.js.map +1 -0
  411. package/dist/tui/components/TextField.d.ts +11 -0
  412. package/dist/tui/components/TextField.d.ts.map +1 -0
  413. package/dist/tui/components/TextField.js +34 -0
  414. package/dist/tui/components/TextField.js.map +1 -0
  415. package/dist/tui/lib/audit-log.d.ts +19 -0
  416. package/dist/tui/lib/audit-log.d.ts.map +1 -0
  417. package/dist/tui/lib/audit-log.js +49 -0
  418. package/dist/tui/lib/audit-log.js.map +1 -0
  419. package/dist/tui/lib/cc-permissions-audit.d.ts +24 -0
  420. package/dist/tui/lib/cc-permissions-audit.d.ts.map +1 -0
  421. package/dist/tui/lib/cc-permissions-audit.js +40 -0
  422. package/dist/tui/lib/cc-permissions-audit.js.map +1 -0
  423. package/dist/tui/lib/cc-permissions-defaults.d.ts +32 -0
  424. package/dist/tui/lib/cc-permissions-defaults.d.ts.map +1 -0
  425. package/dist/tui/lib/cc-permissions-defaults.js +171 -0
  426. package/dist/tui/lib/cc-permissions-defaults.js.map +1 -0
  427. package/dist/tui/lib/cc-permissions-io.d.ts +33 -0
  428. package/dist/tui/lib/cc-permissions-io.d.ts.map +1 -0
  429. package/dist/tui/lib/cc-permissions-io.js +165 -0
  430. package/dist/tui/lib/cc-permissions-io.js.map +1 -0
  431. package/dist/tui/lib/cc-permissions-ops.d.ts +19 -0
  432. package/dist/tui/lib/cc-permissions-ops.d.ts.map +1 -0
  433. package/dist/tui/lib/cc-permissions-ops.js +75 -0
  434. package/dist/tui/lib/cc-permissions-ops.js.map +1 -0
  435. package/dist/tui/lib/cc-permissions-scope.d.ts +15 -0
  436. package/dist/tui/lib/cc-permissions-scope.d.ts.map +1 -0
  437. package/dist/tui/lib/cc-permissions-scope.js +97 -0
  438. package/dist/tui/lib/cc-permissions-scope.js.map +1 -0
  439. package/dist/tui/lib/config-save.d.ts +14 -0
  440. package/dist/tui/lib/config-save.d.ts.map +1 -0
  441. package/dist/tui/lib/config-save.js +39 -0
  442. package/dist/tui/lib/config-save.js.map +1 -0
  443. package/dist/tui/lib/daemon-client.d.ts +67 -0
  444. package/dist/tui/lib/daemon-client.d.ts.map +1 -0
  445. package/dist/tui/lib/daemon-client.js +213 -0
  446. package/dist/tui/lib/daemon-client.js.map +1 -0
  447. package/dist/tui/lib/decision-stream.d.ts +29 -0
  448. package/dist/tui/lib/decision-stream.d.ts.map +1 -0
  449. package/dist/tui/lib/decision-stream.js +77 -0
  450. package/dist/tui/lib/decision-stream.js.map +1 -0
  451. package/dist/tui/lib/number-validate.d.ts +9 -0
  452. package/dist/tui/lib/number-validate.d.ts.map +1 -0
  453. package/dist/tui/lib/number-validate.js +12 -0
  454. package/dist/tui/lib/number-validate.js.map +1 -0
  455. package/dist/tui/lib/session-files.d.ts +9 -0
  456. package/dist/tui/lib/session-files.d.ts.map +1 -0
  457. package/dist/tui/lib/session-files.js +39 -0
  458. package/dist/tui/lib/session-files.js.map +1 -0
  459. package/dist/tui/lib/stats.d.ts +19 -0
  460. package/dist/tui/lib/stats.d.ts.map +1 -0
  461. package/dist/tui/lib/stats.js +72 -0
  462. package/dist/tui/lib/stats.js.map +1 -0
  463. package/dist/tui/lib/test-connection.d.ts +12 -0
  464. package/dist/tui/lib/test-connection.d.ts.map +1 -0
  465. package/dist/tui/lib/test-connection.js +59 -0
  466. package/dist/tui/lib/test-connection.js.map +1 -0
  467. package/dist/tui/lib/tools-policy-ops.d.ts +9 -0
  468. package/dist/tui/lib/tools-policy-ops.d.ts.map +1 -0
  469. package/dist/tui/lib/tools-policy-ops.js +30 -0
  470. package/dist/tui/lib/tools-policy-ops.js.map +1 -0
  471. package/dist/tui/lib/verified-at.d.ts +37 -0
  472. package/dist/tui/lib/verified-at.d.ts.map +1 -0
  473. package/dist/tui/lib/verified-at.js +47 -0
  474. package/dist/tui/lib/verified-at.js.map +1 -0
  475. package/dist/tui/screens/ApiKeys.d.ts +8 -0
  476. package/dist/tui/screens/ApiKeys.d.ts.map +1 -0
  477. package/dist/tui/screens/ApiKeys.js +250 -0
  478. package/dist/tui/screens/ApiKeys.js.map +1 -0
  479. package/dist/tui/screens/AuditViewer.d.ts +8 -0
  480. package/dist/tui/screens/AuditViewer.d.ts.map +1 -0
  481. package/dist/tui/screens/AuditViewer.js +56 -0
  482. package/dist/tui/screens/AuditViewer.js.map +1 -0
  483. package/dist/tui/screens/ContextIngressPolicy.d.ts +7 -0
  484. package/dist/tui/screens/ContextIngressPolicy.d.ts.map +1 -0
  485. package/dist/tui/screens/ContextIngressPolicy.js +145 -0
  486. package/dist/tui/screens/ContextIngressPolicy.js.map +1 -0
  487. package/dist/tui/screens/LiveEvents.d.ts +7 -0
  488. package/dist/tui/screens/LiveEvents.d.ts.map +1 -0
  489. package/dist/tui/screens/LiveEvents.js +72 -0
  490. package/dist/tui/screens/LiveEvents.js.map +1 -0
  491. package/dist/tui/screens/MainMenu.d.ts +11 -0
  492. package/dist/tui/screens/MainMenu.d.ts.map +1 -0
  493. package/dist/tui/screens/MainMenu.js +35 -0
  494. package/dist/tui/screens/MainMenu.js.map +1 -0
  495. package/dist/tui/screens/NativeCcPermissions.d.ts +7 -0
  496. package/dist/tui/screens/NativeCcPermissions.d.ts.map +1 -0
  497. package/dist/tui/screens/NativeCcPermissions.js +249 -0
  498. package/dist/tui/screens/NativeCcPermissions.js.map +1 -0
  499. package/dist/tui/screens/PendingEscalations.d.ts +7 -0
  500. package/dist/tui/screens/PendingEscalations.d.ts.map +1 -0
  501. package/dist/tui/screens/PendingEscalations.js +83 -0
  502. package/dist/tui/screens/PendingEscalations.js.map +1 -0
  503. package/dist/tui/screens/SecurityBaseline.d.ts +7 -0
  504. package/dist/tui/screens/SecurityBaseline.d.ts.map +1 -0
  505. package/dist/tui/screens/SecurityBaseline.js +272 -0
  506. package/dist/tui/screens/SecurityBaseline.js.map +1 -0
  507. package/dist/tui/screens/Stats.d.ts +7 -0
  508. package/dist/tui/screens/Stats.d.ts.map +1 -0
  509. package/dist/tui/screens/Stats.js +36 -0
  510. package/dist/tui/screens/Stats.js.map +1 -0
  511. package/dist/tui/screens/ToolsPolicy.d.ts +7 -0
  512. package/dist/tui/screens/ToolsPolicy.d.ts.map +1 -0
  513. package/dist/tui/screens/ToolsPolicy.js +87 -0
  514. package/dist/tui/screens/ToolsPolicy.js.map +1 -0
  515. package/dist/tui/screens/ViewConfig.d.ts +9 -0
  516. package/dist/tui/screens/ViewConfig.d.ts.map +1 -0
  517. package/dist/tui/screens/ViewConfig.js +117 -0
  518. package/dist/tui/screens/ViewConfig.js.map +1 -0
  519. package/dist/tui/strings.d.ts +97 -0
  520. package/dist/tui/strings.d.ts.map +1 -0
  521. package/dist/tui/strings.js +104 -0
  522. package/dist/tui/strings.js.map +1 -0
  523. package/dist/tui/types.d.ts +5 -0
  524. package/dist/tui/types.d.ts.map +1 -0
  525. package/dist/tui/types.js +2 -0
  526. package/dist/tui/types.js.map +1 -0
  527. package/package.json +74 -0
package/LICENSE.md ADDED
@@ -0,0 +1,37 @@
1
+ # Proprietary License
2
+
3
+ Copyright (c) 2025 Vigil Guard. All Rights Reserved.
4
+
5
+ ## Terms and Conditions
6
+
7
+ This software and associated documentation files (the "Software") are proprietary and confidential.
8
+
9
+ ### Restrictions
10
+
11
+ 1. **No Redistribution**: You may not copy, modify, merge, publish, distribute, sublicense, or sell copies of the Software.
12
+
13
+ 2. **No Reverse Engineering**: You may not reverse engineer, decompile, or disassemble the Software.
14
+
15
+ 3. **No Transfer**: You may not transfer, assign, or sublicense your rights under this license to any third party.
16
+
17
+ 4. **Confidentiality**: You must maintain the confidentiality of the Software and not disclose it to any third party without prior written consent.
18
+
19
+ ### Permitted Uses
20
+
21
+ Use of this Software is permitted only:
22
+
23
+ - Under a valid commercial license agreement
24
+ - For authorized internal development and testing
25
+ - By employees or contractors under NDA
26
+
27
+ ### Warranty Disclaimer
28
+
29
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
30
+
31
+ ### Limitation of Liability
32
+
33
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
34
+
35
+ ### Contact
36
+
37
+ For licensing inquiries, please contact: contact@vigilguard.ai
package/README.md ADDED
@@ -0,0 +1,441 @@
1
+ # vge-cc-guard
2
+
3
+ `vge-cc-guard` is a local security sidecar for Claude Code. It installs Claude
4
+ Code hooks, gates tool calls before execution, sends configured prompt and tool
5
+ content to Vigil Guard Enterprise (VGE), manages user decisions for blocked
6
+ content, and writes a private local audit trail.
7
+
8
+ Current package version: `0.9.0-beta.1`.
9
+
10
+ ## Current State
11
+
12
+ - Phase 1 is complete; Phase 2 PostTool enforcement is active.
13
+ - Runtime is TypeScript on Node.js. The npm package declares
14
+ `node >=20.10.0`.
15
+ - VGE is the only content detector. The sidecar is the hook broker, local
16
+ policy engine, state machine, quarantine layer, and audit writer.
17
+ - `PostToolUse` supports explicit VGE block HITL/quarantine, research-safe
18
+ `SOFT_TAINT` framing for `WebSearch` and `WebFetch`, and fail-open overload
19
+ backpressure for research-tool scans.
20
+
21
+ ## What It Protects
22
+
23
+ Claude Code can read files, run commands, fetch URLs, edit code, and spawn
24
+ subagents. `vge-cc-guard` wraps those paths with:
25
+
26
+ - PreTool gates from local tool policy.
27
+ - Hard credential path protection for `Read`, `Edit`, `Write`, and prompt file
28
+ attachments.
29
+ - Local deterministic URL deny-list checks for `Bash` and `WebFetch` targets.
30
+ - VGE analysis for prompt text, prompt file attachments, and configured tool
31
+ outputs.
32
+ - Session-scoped exact-resource allow/block decisions.
33
+ - Owner-aware decisions for parent sessions and subagents.
34
+ - Local audit JSONL and authenticated local decision metrics.
35
+
36
+ The sidecar does not run local prompt-injection heuristics. URL target checks
37
+ are the local exception: they are deterministic target-control rules, not
38
+ content detection.
39
+
40
+ ## Runtime Model
41
+
42
+ ```text
43
+ Claude Code hook
44
+ -> vge-cc-guard shim
45
+ -> Unix socket or Windows named pipe
46
+ -> vge-cc-guard daemon
47
+ -> local policy and session state
48
+ -> VGE scan when configured
49
+ -> allow, frame, quarantine, ask, or block
50
+ -> private audit/debug logs
51
+ ```
52
+
53
+ The shim is a small per-hook process invoked by Claude Code. It lazy-starts one
54
+ daemon per config directory. `PreToolUse` fails closed if the daemon cannot be
55
+ reached. Non-critical events fail open unless the daemon already returned an
56
+ explicit enforcement response.
57
+
58
+ On macOS and Linux the daemon listens on a Unix socket. On Windows it listens
59
+ on a named pipe. Private local files are hardened with POSIX modes on
60
+ macOS/Linux and ACL tightening on Windows.
61
+
62
+ ## Hook Coverage
63
+
64
+ | Hook | Behavior |
65
+ |---|---|
66
+ | `SessionStart` | Initializes local session state. |
67
+ | `UserPromptSubmit` | Audits prompt receipt, resolves active control replies, scans prompt text and attachments, and blocks or asks before unsafe input reaches Claude. |
68
+ | `PreToolUse` | Applies credential path protection, URL deny-list rules, session decisions, tainted-session policy, and per-tool gates. |
69
+ | `PostToolUse` | Scans configured tool output, frames `SOFT_TAINT`, quarantines explicit VGE blocks, and handles fail-open scan failures. |
70
+ | `SessionEnd` | Flushes state and clears active in-memory decisions for the session. |
71
+ | `SubagentStart` / `SubagentStop` | Tracks subagent ownership for owner-scoped decisions and continuation prompts. |
72
+
73
+ ## PostTool Enforcement
74
+
75
+ An explicit VGE block is any VGE result with one of:
76
+
77
+ - `ruleAction: "BLOCK"`
78
+ - `decision: "BLOCKED"`
79
+ - `arbiterSignal: "BLOCK"`
80
+
81
+ Explicit blocks are never converted to fail-open. The guard either asks for a
82
+ decision or fails closed.
83
+
84
+ For `WebSearch` and `WebFetch`, `SOFT_TAINT` uses a research-safe frame that
85
+ tells Claude to continue the research task while treating retrieved content as
86
+ untrusted, cross-checking claims, and ignoring instructions from retrieved
87
+ content.
88
+
89
+ When `policy.vge_failure_mode.posttool_output` is `fail_open`,
90
+ `WebSearch`/`WebFetch` can use sidecar-local overload backpressure. A `429` or
91
+ `5xx` VGE failure opens a short process-local cooldown. During that cooldown,
92
+ matching research-tool outputs skip VGE, pass through fail-open, set the
93
+ session to `caution`, and emit a distinct
94
+ `posttool_output_scan_skipped_fail_open` audit event. Skipped outputs are not
95
+ cached as VGE decisions.
96
+
97
+ ## Claude Code Contract Health
98
+
99
+ `PostToolUse` L0 output replacement depends on Claude Code accepting
100
+ `hookSpecificOutput.updatedToolOutput`. The daemon treats that as a live
101
+ contract with the installed Claude Code binary. If the saved contract status is
102
+ missing, stale, or tied to a different binary path/SHA/version, L0 replacement
103
+ is disabled and PostTool HITL remains active through the safer degraded path.
104
+
105
+ Check the current state with:
106
+
107
+ ```bash
108
+ vge-cc-guard doctor
109
+ vge-cc-guard daemon status
110
+ vge-cc-guard config
111
+ ```
112
+
113
+ The daemon status and TUI show the contract state, reason, Claude Code version,
114
+ binary path, SHA prefix, live probe result, and next action. Unauthenticated
115
+ `/health` does not expose this metadata.
116
+
117
+ By default the daemon schedules a single background live probe when the
118
+ contract is degraded and `policy.cc_contract.auto_probe_enabled` is `true`.
119
+ The probe runs in a private temporary directory with a fixed Bash `printf`
120
+ command and a temporary `PostToolUse` hook. L0 remains unavailable until the
121
+ probe observes the expected replacement marker from the running Claude Code
122
+ binary and writes `liveContract: "passed"` for the current path, version, and
123
+ SHA.
124
+
125
+ Relevant config defaults:
126
+
127
+ | Field | Default |
128
+ |---|---:|
129
+ | `policy.cc_contract.auto_probe_enabled` | `true` |
130
+ | `policy.cc_contract.auto_probe_timeout_ms` | `5000` |
131
+
132
+ For unit and daemon lifecycle tests, `VGE_CC_GUARD_AUTO_PROBE_DISABLED=1`
133
+ prevents the daemon from launching the live Claude Code probe while preserving
134
+ the degraded runtime state.
135
+
136
+ If auto-probe cannot run because Claude Code is not authenticated or the local
137
+ CLI contract changed, run:
138
+
139
+ ```bash
140
+ RUN_CC_LIVE=1 pnpm test tests/integration/cc-live-contract.test.ts
141
+ ```
142
+
143
+ `vge-cc-guard doctor --cc-contract --assume-live-pass` is still available for
144
+ controlled local recovery, but it is a manual trust override. Do not use it as
145
+ evidence that a new Claude Code binary accepted `updatedToolOutput`.
146
+
147
+ ## Blocking Decisions
148
+
149
+ Blocking decisions use stable `dec_*` IDs. Numeric shortcuts are accepted only
150
+ when they can be routed unambiguously.
151
+
152
+ Supported replies:
153
+
154
+ ```text
155
+ 1
156
+ 2
157
+ 3
158
+ 2 continue the task
159
+ 3 continue the task
160
+ vge allow dec_<id> continue the task
161
+ vge allow-session dec_<id> continue the task
162
+ vge block dec_<id>
163
+ ```
164
+
165
+ | Choice | Meaning |
166
+ |---|---|
167
+ | `1` / `block` | Keep the resource out of model context and record an exact-resource block. |
168
+ | `2` / `allow once` | Allow one exact-resource retry. |
169
+ | `3` / `allow for session` | Allow the exact resource until `SessionEnd`. |
170
+
171
+ HITL decisions do not auto-expire while waiting for a human. They are cleared
172
+ by a recorded decision, explicit reset, `SessionEnd`, daemon restart cleanup,
173
+ or capacity eviction.
174
+
175
+ ## Quick Start
176
+
177
+ Prerequisites:
178
+
179
+ - Node.js `>=20.10.0`.
180
+ - A reachable VGE instance.
181
+ - A VGE API key.
182
+
183
+ For an end-to-end walkthrough of every TUI screen, the block message formats,
184
+ and common workflows, see [docs/USER_GUIDE.md](docs/USER_GUIDE.md).
185
+
186
+ Install globally:
187
+
188
+ ```bash
189
+ npm install -g @vigil-guard/vge-cc-guard # latest stable
190
+ npm install -g @vigil-guard/vge-cc-guard@beta # current beta
191
+ vge-cc-guard install --apply --scope=user
192
+ vge-cc-guard config
193
+ ```
194
+
195
+ Install for one project:
196
+
197
+ ```bash
198
+ cd /path/to/project
199
+ vge-cc-guard install --dry-run --scope=project
200
+ vge-cc-guard install --apply --scope=project
201
+ vge-cc-guard config
202
+ ```
203
+
204
+ Restart open Claude Code sessions after installing or changing hook settings.
205
+
206
+ The installer writes hooks to Claude Code settings and preserves existing
207
+ non-`vge-cc-guard` hooks.
208
+
209
+ | Scope | Settings file |
210
+ |---|---|
211
+ | User | `~/.claude/settings.json` |
212
+ | Project | `<project>/.claude/settings.json` |
213
+
214
+ On Windows, user scope resolves under `%USERPROFILE%\.claude\settings.json`.
215
+
216
+ ## Configuration
217
+
218
+ Open the TUI:
219
+
220
+ ```bash
221
+ vge-cc-guard config
222
+ ```
223
+
224
+ The main config file is:
225
+
226
+ ```text
227
+ ~/.vge-cc-guard/config.json
228
+ ```
229
+
230
+ The TUI manages:
231
+
232
+ - VGE API URL, client identity source, and API keys.
233
+ - Per-tool `gate` and `analyze_output`.
234
+ - IDE compatibility toggles for prompt text, prompt attachments, and subagent
235
+ output enforcement.
236
+ - Per-stage VGE scan failure mode: `fail_closed` or `fail_open`.
237
+ - Credential path protection.
238
+ - URL Access Baseline presets and custom deny rules.
239
+ - Read-only effective config export.
240
+
241
+ Key defaults:
242
+
243
+ | Area | Default |
244
+ |---|---|
245
+ | Credential protection | enabled |
246
+ | Prompt text analysis | enforce |
247
+ | Prompt attachment analysis | enforce |
248
+ | Subagent output analysis | enforce |
249
+ | VGE failure mode | fail closed for prompt text, attachments, and PostTool output |
250
+ | PostTool overload backpressure | enabled, only active with PostTool fail-open and overload failures |
251
+ | URL baseline | enabled; blocks cloud metadata and unsafe URL shapes |
252
+ | Client identity | auto-detected OS username, sent as `metadata.clientId` |
253
+
254
+ Full config semantics live in [docs/CONFIG_DESIGN.md](docs/CONFIG_DESIGN.md).
255
+
256
+ The API Keys screen can set Client identity to Auto, Manual, or Disabled. Auto
257
+ detects the logged-in OS username once per daemon process and sends it to VGE as
258
+ `metadata.clientId`. Manual sends the stored `vge.client_id`. Disabled omits the
259
+ field entirely.
260
+
261
+ ### VGE Connectivity Verification
262
+
263
+ The API Keys screen verifies VGE connectivity through the local daemon control
264
+ path, not from the TUI process directly:
265
+
266
+ ```text
267
+ TUI -> local daemon -> VGE
268
+ ```
269
+
270
+ This matches the process that handles hook traffic. The daemon checks the input
271
+ key against `/v1/guard/input` and, when configured, the output key against
272
+ `/v1/guard/analyze` with `source: "tool_output"`. If no output key is set, the
273
+ TUI reports that output scans use the input key.
274
+
275
+ Successful verification stores `vge.verified_at` plus endpoint and key
276
+ fingerprints. Raw API keys are never written to the verification metadata.
277
+ Changing the endpoint, input key, or output key makes the previous verification
278
+ stale.
279
+
280
+ `vge-cc-guard doctor` also prints VGE connectivity status and a next action
281
+ when degraded.
282
+ Use `vge-cc-guard doctor --no-vge` for a fast local-state check without a live
283
+ VGE round-trip.
284
+
285
+ ## Default Tool Policy
286
+
287
+ | Tool | Gate | Output analysis |
288
+ |---|---:|---:|
289
+ | `Bash` | `allow` | `true` |
290
+ | `Read` | `allow` | `true` |
291
+ | `Grep` | `allow` | `true` |
292
+ | `Glob` | `allow` | `false` |
293
+ | `WebSearch` | `allow` | `true` |
294
+ | `WebFetch` | `allow` | `true` |
295
+ | `Write` | `block` | `false` |
296
+ | `Edit` | `block` | `false` |
297
+ | `Task` | `allow` | `false` |
298
+ | `*` | `ask` | `false` |
299
+
300
+ `Task.analyze_output` remains `false` by default. Subagent-owned tool output is
301
+ covered through owner metadata on the underlying tool hooks when
302
+ `policy.subagent_output_analysis` is `enforce`.
303
+
304
+ ## Credential And URL Protection
305
+
306
+ Credential path protection blocks sensitive local paths before content is read
307
+ or sent to VGE. Examples include:
308
+
309
+ - `.env` and `*.env`
310
+ - `~/.ssh/*`
311
+ - `~/.aws/credentials` and `~/.aws/config`
312
+ - `~/.kube/config`
313
+ - `~/.config/gcloud/*`, `~/.gcp/*`, and Windows gcloud config paths
314
+ - private key filenames such as `id_rsa*` and `id_ed25519*`
315
+ - filenames containing `credentials` or `secrets`
316
+
317
+ URL Access Baseline checks are local and deterministic. Public URLs, localhost,
318
+ loopback, and private LAN targets are allowed by default unless an enabled
319
+ preset or custom deny rule matches. Cloud metadata endpoints, unsafe schemes,
320
+ and URLs with embedded credentials are blocked by default.
321
+
322
+ ## Uninstall
323
+
324
+ ```bash
325
+ vge-cc-guard uninstall --yes --scope=user
326
+ vge-cc-guard uninstall --yes --scope=project
327
+ vge-cc-guard uninstall --yes --project-dir /path/to/project
328
+ ```
329
+
330
+ By default, uninstall preserves the current Claude Code settings file and
331
+ removes only hook entries that invoke `vge-cc-guard hook`. Use `--restore` to
332
+ replace `settings.json` with the install-time backup. Global state under
333
+ `~/.vge-cc-guard/` is removed only after the last install record is gone.
334
+
335
+ ## Commands
336
+
337
+ ```bash
338
+ vge-cc-guard install --apply --scope=user
339
+ vge-cc-guard install --apply --scope=project
340
+ vge-cc-guard install --dry-run
341
+
342
+ vge-cc-guard uninstall --yes --scope=user
343
+ vge-cc-guard uninstall --yes --scope=project
344
+ vge-cc-guard uninstall --yes --scope=user --restore
345
+
346
+ vge-cc-guard config
347
+ vge-cc-guard reset-session
348
+ vge-cc-guard daemon
349
+ vge-cc-guard daemon status
350
+ vge-cc-guard daemon reload
351
+ vge-cc-guard daemon stop
352
+ vge-cc-guard doctor --cc-contract
353
+ vge-cc-guard hook <event>
354
+ ```
355
+
356
+ `hook` is called by Claude Code. Do not run it manually unless testing hook
357
+ payload handling.
358
+
359
+ ## Audit And Metrics
360
+
361
+ Audit records are written as private JSONL under:
362
+
363
+ ```text
364
+ ~/.vge-cc-guard/audit.log
365
+ ```
366
+
367
+ Audit records include decision IDs, session IDs, owner metadata, stage,
368
+ outcome, resolver source, synthesized source, latency, and VGE or local
369
+ fallback metadata. Raw prompt text, raw tool output, full URLs with query
370
+ strings, and API keys are not written to audit.
371
+
372
+ The daemon also exposes an authenticated local metrics snapshot:
373
+
374
+ ```text
375
+ POST /v1/control/decision-metrics
376
+ ```
377
+
378
+ ## IDE Notes
379
+
380
+ Terminal Claude Code supports the full HITL loop. Native IDE panels, including
381
+ VS Code Claude Code surfaces, may not reliably show prompt text or attachment
382
+ decision prompts. For guarded prompt/attachment work, use terminal Claude Code.
383
+
384
+ For IDE-native usage, consider:
385
+
386
+ ```text
387
+ IDE Compatibility -> Prompt text -> off
388
+ IDE Compatibility -> Prompt file attachments -> off
389
+ ```
390
+
391
+ In `off` mode, the guard still scans and audits those ingress paths, but it
392
+ does not create blocking decisions for them. Credential path protection still
393
+ applies.
394
+
395
+ ## Troubleshooting
396
+
397
+ | Symptom | Check |
398
+ |---|---|
399
+ | `vge-cc-guard config` prints permission denied after local build | Run `pnpm build`; local `npm link` needs `dist/cli.js` executable on POSIX. |
400
+ | Tool is always blocked | Open `vge-cc-guard config` and review Tools Policy. |
401
+ | Credential path is denied | Review `policy.credential_protection`; it is enabled by default. |
402
+ | No VGE events | Check API URL/key in `vge-cc-guard config`, then `~/.vge-cc-guard/debug.log`. PreTool URL baseline decisions are local. |
403
+ | Daemon will not start | Run `vge-cc-guard daemon` in the foreground and check Node.js version. |
404
+ | Claude Code GUI cannot find `vge-cc-guard` | GUI apps may not inherit shell `PATH`; install with an absolute hook command path. |
405
+ | Session state seems stuck | Run `vge-cc-guard reset-session`. |
406
+ | PostTool replacement is refused | Run `vge-cc-guard doctor --cc-contract`. |
407
+
408
+ ## Development
409
+
410
+ ```bash
411
+ pnpm install
412
+ pnpm build
413
+ pnpm typecheck
414
+ pnpm lint
415
+ pnpm test
416
+ pnpm test:coverage
417
+ ```
418
+
419
+ Useful local loop:
420
+
421
+ ```bash
422
+ pnpm build
423
+ npm link
424
+ vge-cc-guard install --dry-run --scope=project
425
+ vge-cc-guard daemon
426
+ ```
427
+
428
+ For Windows-sensitive changes, run the CI matrix and the checklist in
429
+ [docs/testing/windows-smoke.md](docs/testing/windows-smoke.md).
430
+
431
+ ## References
432
+
433
+ - [User Guide](docs/USER_GUIDE.md)
434
+ - [Architecture](docs/architecture/claude-code-agent-security-integration.md)
435
+ - [TUI design and config reference](docs/CONFIG_DESIGN.md)
436
+ - [PRD_1](docs/prd/PRD_1/PRD_1.md)
437
+ - [PRD_17](docs/prd/PRD_17/PRD_17.md) — PostTool overload backpressure
438
+ - [PRD_18](docs/prd/PRD_18/PRD_18.md) — Claude Code contract auto-probe
439
+ - [PRD_19](docs/prd/PRD_19/PRD_19.md) — VGE connectivity verification through daemon
440
+ - [ADR-0007](docs/adr/ADR-0007-claude-code-contract-auto-probe.md)
441
+ - [ADR index](docs/adr/)
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/env node
2
+ import { installSystemCAs } from './shared/system-ca.js';
3
+ installSystemCAs();
4
+ const command = process.argv[2];
5
+ const usage = `
6
+ vge-cc-guard <command>
7
+
8
+ Commands:
9
+ install Register hooks in Claude Code settings
10
+ uninstall Remove installed hooks for user/project scope.
11
+ Flags: --yes (required), --scope=user|project, --project-dir <path>, --restore.
12
+ Default preserves current Claude Code settings and removes only vge-cc-guard hooks.
13
+ --restore replaces settings.json with the install-time backup.
14
+ Global state is removed only when the last install is uninstalled.
15
+ config Open TUI configurator
16
+ hook <event> Handle a Claude Code hook event (called by CC, not the user)
17
+ daemon Start the daemon in foreground, or run daemon status|reload|stop|restart
18
+ doctor Run local diagnostics. Flags: --cc-contract
19
+ reset-session Clear session allow/block decisions and legacy pending state
20
+ `.trim();
21
+ switch (command) {
22
+ case 'hook': {
23
+ const { main } = await import('./shim/index.js');
24
+ await main();
25
+ break;
26
+ }
27
+ case 'daemon': {
28
+ const { runDaemonCommand } = await import('./commands/daemon.js');
29
+ await runDaemonCommand(process.argv.slice(3));
30
+ break;
31
+ }
32
+ case 'install': {
33
+ const { runInstall } = await import('./commands/install.js');
34
+ await runInstall(process.argv.slice(3));
35
+ break;
36
+ }
37
+ case 'uninstall': {
38
+ const { runUninstall } = await import('./commands/uninstall.js');
39
+ await runUninstall(process.argv.slice(3));
40
+ break;
41
+ }
42
+ case 'reset-session': {
43
+ const { runResetSession } = await import('./commands/reset-session.js');
44
+ await runResetSession();
45
+ break;
46
+ }
47
+ case 'doctor': {
48
+ const { runDoctor } = await import('./commands/doctor.js');
49
+ await runDoctor(process.argv.slice(3));
50
+ break;
51
+ }
52
+ case 'config': {
53
+ const { runConfig } = await import('./commands/config.js');
54
+ await runConfig();
55
+ break;
56
+ }
57
+ default:
58
+ console.log(usage);
59
+ process.exit(command === '--help' || command === '-h' ? 0 : 1);
60
+ }
61
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,gBAAgB,EAAE,CAAC;AAEnB,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEhC,MAAM,KAAK,GAAG;;;;;;;;;;;;;;;CAeb,CAAC,IAAI,EAAE,CAAC;AAET,QAAQ,OAAO,EAAE,CAAC;IAChB,KAAK,MAAM,CAAC,CAAC,CAAC;QACZ,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;QACjD,MAAM,IAAI,EAAE,CAAC;QACb,MAAM;IACR,CAAC;IACD,KAAK,QAAQ,CAAC,CAAC,CAAC;QACd,MAAM,EAAE,gBAAgB,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAClE,MAAM,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9C,MAAM;IACR,CAAC;IACD,KAAK,SAAS,CAAC,CAAC,CAAC;QACf,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAC7D,MAAM,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM;IACR,CAAC;IACD,KAAK,WAAW,CAAC,CAAC,CAAC;QACjB,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,CAAC;QACjE,MAAM,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,MAAM;IACR,CAAC;IACD,KAAK,eAAe,CAAC,CAAC,CAAC;QACrB,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC;QACxE,MAAM,eAAe,EAAE,CAAC;QACxB,MAAM;IACR,CAAC;IACD,KAAK,QAAQ,CAAC,CAAC,CAAC;QACd,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAC3D,MAAM,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACvC,MAAM;IACR,CAAC;IACD,KAAK,QAAQ,CAAC,CAAC,CAAC;QACd,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QAC3D,MAAM,SAAS,EAAE,CAAC;QAClB,MAAM;IACR,CAAC;IACD;QACE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACnB,OAAO,CAAC,IAAI,CAAC,OAAO,KAAK,QAAQ,IAAI,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,CAAC"}
@@ -0,0 +1,16 @@
1
+ export type InstallScope = 'user' | 'project';
2
+ export interface InstallBackupMetadata {
3
+ scope: InstallScope;
4
+ settingsPath: string;
5
+ installedAt: string;
6
+ }
7
+ export declare function resolveVgeDir(): string;
8
+ export declare function resolveCwd(): string;
9
+ export declare function resolveProjectDir(projectDir?: string): string;
10
+ export declare function resolveClaudeDir(scope: InstallScope, projectDir?: string): string;
11
+ export declare function resolveSettingsPath(scope: InstallScope, projectDir?: string): string;
12
+ export declare function installsDir(): string;
13
+ export declare function installKey(settingsPath: string): string;
14
+ export declare function backupPath(settingsPath: string): string;
15
+ export declare function metaPath(settingsPath: string): string;
16
+ //# sourceMappingURL=install-paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-paths.d.ts","sourceRoot":"","sources":["../../../src/commands/_lib/install-paths.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,CAAC;AAE9C,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,YAAY,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED,wBAAgB,UAAU,IAAI,MAAM,CAMnC;AAED,wBAAgB,iBAAiB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ7D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAGjF;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,YAAY,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAEpF;AAED,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,wBAAgB,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,QAAQ,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAErD"}
@@ -0,0 +1,46 @@
1
+ import * as crypto from 'crypto';
2
+ import * as fs from 'fs';
3
+ import * as os from 'os';
4
+ import * as path from 'path';
5
+ export function resolveVgeDir() {
6
+ return process.env['VGE_CC_GUARD_CONFIG_DIR'] ?? path.join(os.homedir(), '.vge-cc-guard');
7
+ }
8
+ export function resolveCwd() {
9
+ try {
10
+ return process.cwd();
11
+ }
12
+ catch {
13
+ throw new Error('vge-cc-guard: current working directory no longer exists. Pass --project-dir <path>.');
14
+ }
15
+ }
16
+ export function resolveProjectDir(projectDir) {
17
+ const input = projectDir ?? resolveCwd();
18
+ const absolute = path.resolve(input);
19
+ try {
20
+ return fs.realpathSync(absolute);
21
+ }
22
+ catch {
23
+ return absolute;
24
+ }
25
+ }
26
+ export function resolveClaudeDir(scope, projectDir) {
27
+ if (scope === 'project')
28
+ return path.join(resolveProjectDir(projectDir), '.claude');
29
+ return process.env['CLAUDE_CONFIG_HOME'] ?? path.join(os.homedir(), '.claude');
30
+ }
31
+ export function resolveSettingsPath(scope, projectDir) {
32
+ return path.join(resolveClaudeDir(scope, projectDir), 'settings.json');
33
+ }
34
+ export function installsDir() {
35
+ return path.join(resolveVgeDir(), 'installs');
36
+ }
37
+ export function installKey(settingsPath) {
38
+ return crypto.createHash('sha256').update(settingsPath).digest('hex').slice(0, 16);
39
+ }
40
+ export function backupPath(settingsPath) {
41
+ return path.join(installsDir(), `${installKey(settingsPath)}.backup.json`);
42
+ }
43
+ export function metaPath(settingsPath) {
44
+ return path.join(installsDir(), `${installKey(settingsPath)}.meta.json`);
45
+ }
46
+ //# sourceMappingURL=install-paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install-paths.js","sourceRoot":"","sources":["../../../src/commands/_lib/install-paths.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAU7B,MAAM,UAAU,aAAa;IAC3B,OAAO,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,eAAe,CAAC,CAAC;AAC5F,CAAC;AAED,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC;IACvB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,sFAAsF,CAAC,CAAC;IAC1G,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,UAAmB;IACnD,MAAM,KAAK,GAAG,UAAU,IAAI,UAAU,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACrC,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,QAAQ,CAAC;IAClB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAmB,EAAE,UAAmB;IACvE,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,CAAC;IACpF,OAAO,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AACjF,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAmB,EAAE,UAAmB;IAC1E,OAAO,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,eAAe,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,OAAO,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,UAAU,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,YAAoB;IAC7C,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACrF,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,YAAoB;IAC7C,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,GAAG,UAAU,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;AAC7E,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,YAAoB;IAC3C,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,GAAG,UAAU,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;AAC3E,CAAC"}
@@ -0,0 +1,8 @@
1
+ export type InstallScope = 'user' | 'project';
2
+ export type InstallMode = 'apply' | 'dry-run' | 'wizard';
3
+ export interface InstallFlags {
4
+ scope: InstallScope;
5
+ mode: InstallMode;
6
+ }
7
+ export declare function parseInstallFlags(args: readonly string[]): InstallFlags;
8
+ //# sourceMappingURL=parse-install-flags.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-install-flags.d.ts","sourceRoot":"","sources":["../../../src/commands/_lib/parse-install-flags.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG,SAAS,CAAC;AAC9C,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAC;AAEzD,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,YAAY,CAAC;IACpB,IAAI,EAAE,WAAW,CAAC;CACnB;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,YAAY,CAUvE"}
@@ -0,0 +1,15 @@
1
+ export function parseInstallFlags(args) {
2
+ // `--project` is the Phase 1c shorthand for `--scope=project --apply`.
3
+ // Explicit flags (--apply/--dry-run) keep their existing precedence over
4
+ // each other; --project's implicit apply only kicks in if neither is set.
5
+ const projectAlias = args.includes('--project');
6
+ const scope = projectAlias || args.includes('--scope=project') ? 'project' : 'user';
7
+ if (args.includes('--apply'))
8
+ return { scope, mode: 'apply' };
9
+ if (args.includes('--dry-run'))
10
+ return { scope, mode: 'dry-run' };
11
+ if (projectAlias)
12
+ return { scope, mode: 'apply' };
13
+ return { scope, mode: 'wizard' };
14
+ }
15
+ //# sourceMappingURL=parse-install-flags.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-install-flags.js","sourceRoot":"","sources":["../../../src/commands/_lib/parse-install-flags.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,iBAAiB,CAAC,IAAuB;IACvD,uEAAuE;IACvE,yEAAyE;IACzE,0EAA0E;IAC1E,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,KAAK,GAAiB,YAAY,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;IAClG,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAC9D,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IAClE,IAAI,YAAY;QAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;IAClD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AACnC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function runConfig(): Promise<void>;
2
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.tsx"],"names":[],"mappings":"AAOA,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CAqC/C"}