@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.
- package/LICENSE.md +37 -0
- package/README.md +441 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +61 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/_lib/install-paths.d.ts +16 -0
- package/dist/commands/_lib/install-paths.d.ts.map +1 -0
- package/dist/commands/_lib/install-paths.js +46 -0
- package/dist/commands/_lib/install-paths.js.map +1 -0
- package/dist/commands/_lib/parse-install-flags.d.ts +8 -0
- package/dist/commands/_lib/parse-install-flags.d.ts.map +1 -0
- package/dist/commands/_lib/parse-install-flags.js +15 -0
- package/dist/commands/_lib/parse-install-flags.js.map +1 -0
- package/dist/commands/config.d.ts +2 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +41 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/daemon.d.ts +2 -0
- package/dist/commands/daemon.d.ts.map +1 -0
- package/dist/commands/daemon.js +116 -0
- package/dist/commands/daemon.js.map +1 -0
- package/dist/commands/doctor.d.ts +2 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +53 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/install-wizard.d.ts +2 -0
- package/dist/commands/install-wizard.d.ts.map +1 -0
- package/dist/commands/install-wizard.js +85 -0
- package/dist/commands/install-wizard.js.map +1 -0
- package/dist/commands/install.d.ts +15 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +136 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/reset-session.d.ts +2 -0
- package/dist/commands/reset-session.d.ts.map +1 -0
- package/dist/commands/reset-session.js +113 -0
- package/dist/commands/reset-session.js.map +1 -0
- package/dist/commands/uninstall.d.ts +2 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +277 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/daemon/active-conversation-decisions.d.ts +9 -0
- package/dist/daemon/active-conversation-decisions.d.ts.map +1 -0
- package/dist/daemon/active-conversation-decisions.js +58 -0
- package/dist/daemon/active-conversation-decisions.js.map +1 -0
- package/dist/daemon/allowlist.d.ts +2 -0
- package/dist/daemon/allowlist.d.ts.map +1 -0
- package/dist/daemon/allowlist.js +118 -0
- package/dist/daemon/allowlist.js.map +1 -0
- package/dist/daemon/analysis-source.d.ts +17 -0
- package/dist/daemon/analysis-source.d.ts.map +1 -0
- package/dist/daemon/analysis-source.js +114 -0
- package/dist/daemon/analysis-source.js.map +1 -0
- package/dist/daemon/ask-dialog.d.ts +23 -0
- package/dist/daemon/ask-dialog.d.ts.map +1 -0
- package/dist/daemon/ask-dialog.js +114 -0
- package/dist/daemon/ask-dialog.js.map +1 -0
- package/dist/daemon/attachment-decision-escrow.d.ts +27 -0
- package/dist/daemon/attachment-decision-escrow.d.ts.map +1 -0
- package/dist/daemon/attachment-decision-escrow.js +34 -0
- package/dist/daemon/attachment-decision-escrow.js.map +1 -0
- package/dist/daemon/attachment-input-enforcement.d.ts +11 -0
- package/dist/daemon/attachment-input-enforcement.d.ts.map +1 -0
- package/dist/daemon/attachment-input-enforcement.js +434 -0
- package/dist/daemon/attachment-input-enforcement.js.map +1 -0
- package/dist/daemon/audit-decisions.d.ts +51 -0
- package/dist/daemon/audit-decisions.d.ts.map +1 -0
- package/dist/daemon/audit-decisions.js +178 -0
- package/dist/daemon/audit-decisions.js.map +1 -0
- package/dist/daemon/audit-logger.d.ts +6 -0
- package/dist/daemon/audit-logger.d.ts.map +1 -0
- package/dist/daemon/audit-logger.js +6 -0
- package/dist/daemon/audit-logger.js.map +1 -0
- package/dist/daemon/audit-posttool.d.ts +123 -0
- package/dist/daemon/audit-posttool.d.ts.map +1 -0
- package/dist/daemon/audit-posttool.js +173 -0
- package/dist/daemon/audit-posttool.js.map +1 -0
- package/dist/daemon/audit-pretool.d.ts +56 -0
- package/dist/daemon/audit-pretool.d.ts.map +1 -0
- package/dist/daemon/audit-pretool.js +77 -0
- package/dist/daemon/audit-pretool.js.map +1 -0
- package/dist/daemon/audit-userprompt.d.ts +113 -0
- package/dist/daemon/audit-userprompt.d.ts.map +1 -0
- package/dist/daemon/audit-userprompt.js +162 -0
- package/dist/daemon/audit-userprompt.js.map +1 -0
- package/dist/daemon/blocking-decision-triggers.d.ts +5 -0
- package/dist/daemon/blocking-decision-triggers.d.ts.map +1 -0
- package/dist/daemon/blocking-decision-triggers.js +40 -0
- package/dist/daemon/blocking-decision-triggers.js.map +1 -0
- package/dist/daemon/cc-contract-auto-probe.d.ts +40 -0
- package/dist/daemon/cc-contract-auto-probe.d.ts.map +1 -0
- package/dist/daemon/cc-contract-auto-probe.js +101 -0
- package/dist/daemon/cc-contract-auto-probe.js.map +1 -0
- package/dist/daemon/cc-contract-probe.d.ts +46 -0
- package/dist/daemon/cc-contract-probe.d.ts.map +1 -0
- package/dist/daemon/cc-contract-probe.js +138 -0
- package/dist/daemon/cc-contract-probe.js.map +1 -0
- package/dist/daemon/cc-contract-runtime.d.ts +8 -0
- package/dist/daemon/cc-contract-runtime.d.ts.map +1 -0
- package/dist/daemon/cc-contract-runtime.js +42 -0
- package/dist/daemon/cc-contract-runtime.js.map +1 -0
- package/dist/daemon/cc-contract-status.d.ts +40 -0
- package/dist/daemon/cc-contract-status.d.ts.map +1 -0
- package/dist/daemon/cc-contract-status.js +242 -0
- package/dist/daemon/cc-contract-status.js.map +1 -0
- package/dist/daemon/confidence-router.d.ts +3 -0
- package/dist/daemon/confidence-router.d.ts.map +1 -0
- package/dist/daemon/confidence-router.js +34 -0
- package/dist/daemon/confidence-router.js.map +1 -0
- package/dist/daemon/conversation-context.d.ts +28 -0
- package/dist/daemon/conversation-context.d.ts.map +1 -0
- package/dist/daemon/conversation-context.js +271 -0
- package/dist/daemon/conversation-context.js.map +1 -0
- package/dist/daemon/conversation-decision-cleanup.d.ts +2 -0
- package/dist/daemon/conversation-decision-cleanup.d.ts.map +1 -0
- package/dist/daemon/conversation-decision-cleanup.js +22 -0
- package/dist/daemon/conversation-decision-cleanup.js.map +1 -0
- package/dist/daemon/conversation-decision-escrow.d.ts +20 -0
- package/dist/daemon/conversation-decision-escrow.d.ts.map +1 -0
- package/dist/daemon/conversation-decision-escrow.js +78 -0
- package/dist/daemon/conversation-decision-escrow.js.map +1 -0
- package/dist/daemon/conversation-decision-prompt.d.ts +30 -0
- package/dist/daemon/conversation-decision-prompt.d.ts.map +1 -0
- package/dist/daemon/conversation-decision-prompt.js +250 -0
- package/dist/daemon/conversation-decision-prompt.js.map +1 -0
- package/dist/daemon/daemon-instance.d.ts +27 -0
- package/dist/daemon/daemon-instance.d.ts.map +1 -0
- package/dist/daemon/daemon-instance.js +41 -0
- package/dist/daemon/daemon-instance.js.map +1 -0
- package/dist/daemon/daemon-ipc.d.ts +29 -0
- package/dist/daemon/daemon-ipc.d.ts.map +1 -0
- package/dist/daemon/daemon-ipc.js +82 -0
- package/dist/daemon/daemon-ipc.js.map +1 -0
- package/dist/daemon/daemon-supersede.d.ts +3 -0
- package/dist/daemon/daemon-supersede.d.ts.map +1 -0
- package/dist/daemon/daemon-supersede.js +126 -0
- package/dist/daemon/daemon-supersede.js.map +1 -0
- package/dist/daemon/debug-logger.d.ts +5 -0
- package/dist/daemon/debug-logger.d.ts.map +1 -0
- package/dist/daemon/debug-logger.js +247 -0
- package/dist/daemon/debug-logger.js.map +1 -0
- package/dist/daemon/decision-broker.d.ts +58 -0
- package/dist/daemon/decision-broker.d.ts.map +1 -0
- package/dist/daemon/decision-broker.js +340 -0
- package/dist/daemon/decision-broker.js.map +1 -0
- package/dist/daemon/decision-metrics.d.ts +40 -0
- package/dist/daemon/decision-metrics.d.ts.map +1 -0
- package/dist/daemon/decision-metrics.js +116 -0
- package/dist/daemon/decision-metrics.js.map +1 -0
- package/dist/daemon/decision-owner.d.ts +10 -0
- package/dist/daemon/decision-owner.d.ts.map +1 -0
- package/dist/daemon/decision-owner.js +30 -0
- package/dist/daemon/decision-owner.js.map +1 -0
- package/dist/daemon/decision-routes.d.ts +7 -0
- package/dist/daemon/decision-routes.d.ts.map +1 -0
- package/dist/daemon/decision-routes.js +104 -0
- package/dist/daemon/decision-routes.js.map +1 -0
- package/dist/daemon/decision-timeout.d.ts +3 -0
- package/dist/daemon/decision-timeout.d.ts.map +1 -0
- package/dist/daemon/decision-timeout.js +5 -0
- package/dist/daemon/decision-timeout.js.map +1 -0
- package/dist/daemon/decision-transition.d.ts +12 -0
- package/dist/daemon/decision-transition.d.ts.map +1 -0
- package/dist/daemon/decision-transition.js +8 -0
- package/dist/daemon/decision-transition.js.map +1 -0
- package/dist/daemon/http-server.d.ts +4 -0
- package/dist/daemon/http-server.d.ts.map +1 -0
- package/dist/daemon/http-server.js +535 -0
- package/dist/daemon/http-server.js.map +1 -0
- package/dist/daemon/id-validation.d.ts +2 -0
- package/dist/daemon/id-validation.d.ts.map +1 -0
- package/dist/daemon/id-validation.js +5 -0
- package/dist/daemon/id-validation.js.map +1 -0
- package/dist/daemon/path-deny.d.ts +14 -0
- package/dist/daemon/path-deny.d.ts.map +1 -0
- package/dist/daemon/path-deny.js +88 -0
- package/dist/daemon/path-deny.js.map +1 -0
- package/dist/daemon/posttool-decision-escrow.d.ts +42 -0
- package/dist/daemon/posttool-decision-escrow.d.ts.map +1 -0
- package/dist/daemon/posttool-decision-escrow.js +349 -0
- package/dist/daemon/posttool-decision-escrow.js.map +1 -0
- package/dist/daemon/posttool-decision-state.d.ts +65 -0
- package/dist/daemon/posttool-decision-state.d.ts.map +1 -0
- package/dist/daemon/posttool-decision-state.js +223 -0
- package/dist/daemon/posttool-decision-state.js.map +1 -0
- package/dist/daemon/posttool-enforcement.d.ts +7 -0
- package/dist/daemon/posttool-enforcement.d.ts.map +1 -0
- package/dist/daemon/posttool-enforcement.js +511 -0
- package/dist/daemon/posttool-enforcement.js.map +1 -0
- package/dist/daemon/posttool-render.d.ts +48 -0
- package/dist/daemon/posttool-render.d.ts.map +1 -0
- package/dist/daemon/posttool-render.js +335 -0
- package/dist/daemon/posttool-render.js.map +1 -0
- package/dist/daemon/pretool-decision-escrow.d.ts +51 -0
- package/dist/daemon/pretool-decision-escrow.d.ts.map +1 -0
- package/dist/daemon/pretool-decision-escrow.js +295 -0
- package/dist/daemon/pretool-decision-escrow.js.map +1 -0
- package/dist/daemon/pretool-url-gate.d.ts +17 -0
- package/dist/daemon/pretool-url-gate.d.ts.map +1 -0
- package/dist/daemon/pretool-url-gate.js +60 -0
- package/dist/daemon/pretool-url-gate.js.map +1 -0
- package/dist/daemon/prompt-input-enforcement.d.ts +18 -0
- package/dist/daemon/prompt-input-enforcement.d.ts.map +1 -0
- package/dist/daemon/prompt-input-enforcement.js +248 -0
- package/dist/daemon/prompt-input-enforcement.js.map +1 -0
- package/dist/daemon/reply-parser.d.ts +10 -0
- package/dist/daemon/reply-parser.d.ts.map +1 -0
- package/dist/daemon/reply-parser.js +81 -0
- package/dist/daemon/reply-parser.js.map +1 -0
- package/dist/daemon/resolve-escalation-route.d.ts +5 -0
- package/dist/daemon/resolve-escalation-route.d.ts.map +1 -0
- package/dist/daemon/resolve-escalation-route.js +85 -0
- package/dist/daemon/resolve-escalation-route.js.map +1 -0
- package/dist/daemon/response-cache.d.ts +14 -0
- package/dist/daemon/response-cache.d.ts.map +1 -0
- package/dist/daemon/response-cache.js +38 -0
- package/dist/daemon/response-cache.js.map +1 -0
- package/dist/daemon/security-frame.d.ts +14 -0
- package/dist/daemon/security-frame.d.ts.map +1 -0
- package/dist/daemon/security-frame.js +96 -0
- package/dist/daemon/security-frame.js.map +1 -0
- package/dist/daemon/session-hook-routes.d.ts +3 -0
- package/dist/daemon/session-hook-routes.d.ts.map +1 -0
- package/dist/daemon/session-hook-routes.js +66 -0
- package/dist/daemon/session-hook-routes.js.map +1 -0
- package/dist/daemon/session-state.d.ts +52 -0
- package/dist/daemon/session-state.d.ts.map +1 -0
- package/dist/daemon/session-state.js +495 -0
- package/dist/daemon/session-state.js.map +1 -0
- package/dist/daemon/subagent-lifecycle.d.ts +8 -0
- package/dist/daemon/subagent-lifecycle.d.ts.map +1 -0
- package/dist/daemon/subagent-lifecycle.js +56 -0
- package/dist/daemon/subagent-lifecycle.js.map +1 -0
- package/dist/daemon/tool-output-redactor.d.ts +13 -0
- package/dist/daemon/tool-output-redactor.d.ts.map +1 -0
- package/dist/daemon/tool-output-redactor.js +82 -0
- package/dist/daemon/tool-output-redactor.js.map +1 -0
- package/dist/daemon/tool-policy.d.ts +16 -0
- package/dist/daemon/tool-policy.d.ts.map +1 -0
- package/dist/daemon/tool-policy.js +60 -0
- package/dist/daemon/tool-policy.js.map +1 -0
- package/dist/daemon/tool-response-normalizer.d.ts +11 -0
- package/dist/daemon/tool-response-normalizer.d.ts.map +1 -0
- package/dist/daemon/tool-response-normalizer.js +67 -0
- package/dist/daemon/tool-response-normalizer.js.map +1 -0
- package/dist/daemon/truncate.d.ts +3 -0
- package/dist/daemon/truncate.d.ts.map +1 -0
- package/dist/daemon/truncate.js +22 -0
- package/dist/daemon/truncate.js.map +1 -0
- package/dist/daemon/url-access-baseline.d.ts +46 -0
- package/dist/daemon/url-access-baseline.d.ts.map +1 -0
- package/dist/daemon/url-access-baseline.js +154 -0
- package/dist/daemon/url-access-baseline.js.map +1 -0
- package/dist/daemon/url-block-decisions.d.ts +27 -0
- package/dist/daemon/url-block-decisions.d.ts.map +1 -0
- package/dist/daemon/url-block-decisions.js +100 -0
- package/dist/daemon/url-block-decisions.js.map +1 -0
- package/dist/daemon/url-extractor.d.ts +7 -0
- package/dist/daemon/url-extractor.d.ts.map +1 -0
- package/dist/daemon/url-extractor.js +101 -0
- package/dist/daemon/url-extractor.js.map +1 -0
- package/dist/daemon/userprompt-decision-escrow.d.ts +45 -0
- package/dist/daemon/userprompt-decision-escrow.d.ts.map +1 -0
- package/dist/daemon/userprompt-decision-escrow.js +248 -0
- package/dist/daemon/userprompt-decision-escrow.js.map +1 -0
- package/dist/daemon/vge-client.d.ts +64 -0
- package/dist/daemon/vge-client.d.ts.map +1 -0
- package/dist/daemon/vge-client.js +453 -0
- package/dist/daemon/vge-client.js.map +1 -0
- package/dist/daemon/vge-connectivity.d.ts +27 -0
- package/dist/daemon/vge-connectivity.d.ts.map +1 -0
- package/dist/daemon/vge-connectivity.js +214 -0
- package/dist/daemon/vge-connectivity.js.map +1 -0
- package/dist/daemon/vge-health-route.d.ts +4 -0
- package/dist/daemon/vge-health-route.d.ts.map +1 -0
- package/dist/daemon/vge-health-route.js +107 -0
- package/dist/daemon/vge-health-route.js.map +1 -0
- package/dist/daemon/vge-overload-backpressure.d.ts +51 -0
- package/dist/daemon/vge-overload-backpressure.d.ts.map +1 -0
- package/dist/daemon/vge-overload-backpressure.js +79 -0
- package/dist/daemon/vge-overload-backpressure.js.map +1 -0
- package/dist/daemon/vge-scan-failure-policy.d.ts +8 -0
- package/dist/daemon/vge-scan-failure-policy.d.ts.map +1 -0
- package/dist/daemon/vge-scan-failure-policy.js +12 -0
- package/dist/daemon/vge-scan-failure-policy.js.map +1 -0
- package/dist/shared/audit-writer.d.ts +9 -0
- package/dist/shared/audit-writer.d.ts.map +1 -0
- package/dist/shared/audit-writer.js +72 -0
- package/dist/shared/audit-writer.js.map +1 -0
- package/dist/shared/blocking-decision-choices.d.ts +13 -0
- package/dist/shared/blocking-decision-choices.d.ts.map +1 -0
- package/dist/shared/blocking-decision-choices.js +40 -0
- package/dist/shared/blocking-decision-choices.js.map +1 -0
- package/dist/shared/blocking-decision-reply.d.ts +13 -0
- package/dist/shared/blocking-decision-reply.d.ts.map +1 -0
- package/dist/shared/blocking-decision-reply.js +78 -0
- package/dist/shared/blocking-decision-reply.js.map +1 -0
- package/dist/shared/build-stamp.d.ts +7 -0
- package/dist/shared/build-stamp.d.ts.map +1 -0
- package/dist/shared/build-stamp.js +23 -0
- package/dist/shared/build-stamp.js.map +1 -0
- package/dist/shared/config-io.d.ts +41 -0
- package/dist/shared/config-io.d.ts.map +1 -0
- package/dist/shared/config-io.js +105 -0
- package/dist/shared/config-io.js.map +1 -0
- package/dist/shared/config-schema.d.ts +467 -0
- package/dist/shared/config-schema.d.ts.map +1 -0
- package/dist/shared/config-schema.js +281 -0
- package/dist/shared/config-schema.js.map +1 -0
- package/dist/shared/daemon-token.d.ts +7 -0
- package/dist/shared/daemon-token.d.ts.map +1 -0
- package/dist/shared/daemon-token.js +45 -0
- package/dist/shared/daemon-token.js.map +1 -0
- package/dist/shared/detect-os-user.d.ts +8 -0
- package/dist/shared/detect-os-user.d.ts.map +1 -0
- package/dist/shared/detect-os-user.js +34 -0
- package/dist/shared/detect-os-user.js.map +1 -0
- package/dist/shared/effective-client-id.d.ts +6 -0
- package/dist/shared/effective-client-id.d.ts.map +1 -0
- package/dist/shared/effective-client-id.js +22 -0
- package/dist/shared/effective-client-id.js.map +1 -0
- package/dist/shared/ipc-address.d.ts +10 -0
- package/dist/shared/ipc-address.d.ts.map +1 -0
- package/dist/shared/ipc-address.js +33 -0
- package/dist/shared/ipc-address.js.map +1 -0
- package/dist/shared/ipc-protocol.d.ts +60 -0
- package/dist/shared/ipc-protocol.d.ts.map +1 -0
- package/dist/shared/ipc-protocol.js +2 -0
- package/dist/shared/ipc-protocol.js.map +1 -0
- package/dist/shared/path-match.d.ts +4 -0
- package/dist/shared/path-match.d.ts.map +1 -0
- package/dist/shared/path-match.js +15 -0
- package/dist/shared/path-match.js.map +1 -0
- package/dist/shared/private-file.d.ts +17 -0
- package/dist/shared/private-file.d.ts.map +1 -0
- package/dist/shared/private-file.js +144 -0
- package/dist/shared/private-file.js.map +1 -0
- package/dist/shared/runtime-lock.d.ts +30 -0
- package/dist/shared/runtime-lock.d.ts.map +1 -0
- package/dist/shared/runtime-lock.js +142 -0
- package/dist/shared/runtime-lock.js.map +1 -0
- package/dist/shared/system-ca.d.ts +2 -0
- package/dist/shared/system-ca.d.ts.map +1 -0
- package/dist/shared/system-ca.js +31 -0
- package/dist/shared/system-ca.js.map +1 -0
- package/dist/shared/types.d.ts +172 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/types.js +2 -0
- package/dist/shared/types.js.map +1 -0
- package/dist/shared/url-allowlist.d.ts +4 -0
- package/dist/shared/url-allowlist.d.ts.map +1 -0
- package/dist/shared/url-allowlist.js +33 -0
- package/dist/shared/url-allowlist.js.map +1 -0
- package/dist/shared/url-patterns.d.ts +12 -0
- package/dist/shared/url-patterns.d.ts.map +1 -0
- package/dist/shared/url-patterns.js +165 -0
- package/dist/shared/url-patterns.js.map +1 -0
- package/dist/shared/vge-url.d.ts +16 -0
- package/dist/shared/vge-url.d.ts.map +1 -0
- package/dist/shared/vge-url.js +75 -0
- package/dist/shared/vge-url.js.map +1 -0
- package/dist/shared/vge-verification.d.ts +18 -0
- package/dist/shared/vge-verification.d.ts.map +1 -0
- package/dist/shared/vge-verification.js +24 -0
- package/dist/shared/vge-verification.js.map +1 -0
- package/dist/shim/daemon-start-lock.d.ts +13 -0
- package/dist/shim/daemon-start-lock.d.ts.map +1 -0
- package/dist/shim/daemon-start-lock.js +26 -0
- package/dist/shim/daemon-start-lock.js.map +1 -0
- package/dist/shim/index.d.ts +17 -0
- package/dist/shim/index.d.ts.map +1 -0
- package/dist/shim/index.js +180 -0
- package/dist/shim/index.js.map +1 -0
- package/dist/shim/inline-resolver-terminal.d.ts +12 -0
- package/dist/shim/inline-resolver-terminal.d.ts.map +1 -0
- package/dist/shim/inline-resolver-terminal.js +201 -0
- package/dist/shim/inline-resolver-terminal.js.map +1 -0
- package/dist/shim/inline-resolver-transport.d.ts +15 -0
- package/dist/shim/inline-resolver-transport.d.ts.map +1 -0
- package/dist/shim/inline-resolver-transport.js +68 -0
- package/dist/shim/inline-resolver-transport.js.map +1 -0
- package/dist/shim/inline-resolver.d.ts +18 -0
- package/dist/shim/inline-resolver.d.ts.map +1 -0
- package/dist/shim/inline-resolver.js +152 -0
- package/dist/shim/inline-resolver.js.map +1 -0
- package/dist/shim/lazy-start.d.ts +2 -0
- package/dist/shim/lazy-start.d.ts.map +1 -0
- package/dist/shim/lazy-start.js +68 -0
- package/dist/shim/lazy-start.js.map +1 -0
- package/dist/tui/App.d.ts +7 -0
- package/dist/tui/App.d.ts.map +1 -0
- package/dist/tui/App.js +62 -0
- package/dist/tui/App.js.map +1 -0
- package/dist/tui/components/Banner.d.ts +9 -0
- package/dist/tui/components/Banner.d.ts.map +1 -0
- package/dist/tui/components/Banner.js +29 -0
- package/dist/tui/components/Banner.js.map +1 -0
- package/dist/tui/components/BlockingDecisionModal.d.ts +11 -0
- package/dist/tui/components/BlockingDecisionModal.d.ts.map +1 -0
- package/dist/tui/components/BlockingDecisionModal.js +34 -0
- package/dist/tui/components/BlockingDecisionModal.js.map +1 -0
- package/dist/tui/components/ScreenChrome.d.ts +20 -0
- package/dist/tui/components/ScreenChrome.d.ts.map +1 -0
- package/dist/tui/components/ScreenChrome.js +30 -0
- package/dist/tui/components/ScreenChrome.js.map +1 -0
- package/dist/tui/components/SelectList.d.ts +14 -0
- package/dist/tui/components/SelectList.d.ts.map +1 -0
- package/dist/tui/components/SelectList.js +22 -0
- package/dist/tui/components/SelectList.js.map +1 -0
- package/dist/tui/components/TextField.d.ts +11 -0
- package/dist/tui/components/TextField.d.ts.map +1 -0
- package/dist/tui/components/TextField.js +34 -0
- package/dist/tui/components/TextField.js.map +1 -0
- package/dist/tui/lib/audit-log.d.ts +19 -0
- package/dist/tui/lib/audit-log.d.ts.map +1 -0
- package/dist/tui/lib/audit-log.js +49 -0
- package/dist/tui/lib/audit-log.js.map +1 -0
- package/dist/tui/lib/cc-permissions-audit.d.ts +24 -0
- package/dist/tui/lib/cc-permissions-audit.d.ts.map +1 -0
- package/dist/tui/lib/cc-permissions-audit.js +40 -0
- package/dist/tui/lib/cc-permissions-audit.js.map +1 -0
- package/dist/tui/lib/cc-permissions-defaults.d.ts +32 -0
- package/dist/tui/lib/cc-permissions-defaults.d.ts.map +1 -0
- package/dist/tui/lib/cc-permissions-defaults.js +171 -0
- package/dist/tui/lib/cc-permissions-defaults.js.map +1 -0
- package/dist/tui/lib/cc-permissions-io.d.ts +33 -0
- package/dist/tui/lib/cc-permissions-io.d.ts.map +1 -0
- package/dist/tui/lib/cc-permissions-io.js +165 -0
- package/dist/tui/lib/cc-permissions-io.js.map +1 -0
- package/dist/tui/lib/cc-permissions-ops.d.ts +19 -0
- package/dist/tui/lib/cc-permissions-ops.d.ts.map +1 -0
- package/dist/tui/lib/cc-permissions-ops.js +75 -0
- package/dist/tui/lib/cc-permissions-ops.js.map +1 -0
- package/dist/tui/lib/cc-permissions-scope.d.ts +15 -0
- package/dist/tui/lib/cc-permissions-scope.d.ts.map +1 -0
- package/dist/tui/lib/cc-permissions-scope.js +97 -0
- package/dist/tui/lib/cc-permissions-scope.js.map +1 -0
- package/dist/tui/lib/config-save.d.ts +14 -0
- package/dist/tui/lib/config-save.d.ts.map +1 -0
- package/dist/tui/lib/config-save.js +39 -0
- package/dist/tui/lib/config-save.js.map +1 -0
- package/dist/tui/lib/daemon-client.d.ts +67 -0
- package/dist/tui/lib/daemon-client.d.ts.map +1 -0
- package/dist/tui/lib/daemon-client.js +213 -0
- package/dist/tui/lib/daemon-client.js.map +1 -0
- package/dist/tui/lib/decision-stream.d.ts +29 -0
- package/dist/tui/lib/decision-stream.d.ts.map +1 -0
- package/dist/tui/lib/decision-stream.js +77 -0
- package/dist/tui/lib/decision-stream.js.map +1 -0
- package/dist/tui/lib/number-validate.d.ts +9 -0
- package/dist/tui/lib/number-validate.d.ts.map +1 -0
- package/dist/tui/lib/number-validate.js +12 -0
- package/dist/tui/lib/number-validate.js.map +1 -0
- package/dist/tui/lib/session-files.d.ts +9 -0
- package/dist/tui/lib/session-files.d.ts.map +1 -0
- package/dist/tui/lib/session-files.js +39 -0
- package/dist/tui/lib/session-files.js.map +1 -0
- package/dist/tui/lib/stats.d.ts +19 -0
- package/dist/tui/lib/stats.d.ts.map +1 -0
- package/dist/tui/lib/stats.js +72 -0
- package/dist/tui/lib/stats.js.map +1 -0
- package/dist/tui/lib/test-connection.d.ts +12 -0
- package/dist/tui/lib/test-connection.d.ts.map +1 -0
- package/dist/tui/lib/test-connection.js +59 -0
- package/dist/tui/lib/test-connection.js.map +1 -0
- package/dist/tui/lib/tools-policy-ops.d.ts +9 -0
- package/dist/tui/lib/tools-policy-ops.d.ts.map +1 -0
- package/dist/tui/lib/tools-policy-ops.js +30 -0
- package/dist/tui/lib/tools-policy-ops.js.map +1 -0
- package/dist/tui/lib/verified-at.d.ts +37 -0
- package/dist/tui/lib/verified-at.d.ts.map +1 -0
- package/dist/tui/lib/verified-at.js +47 -0
- package/dist/tui/lib/verified-at.js.map +1 -0
- package/dist/tui/screens/ApiKeys.d.ts +8 -0
- package/dist/tui/screens/ApiKeys.d.ts.map +1 -0
- package/dist/tui/screens/ApiKeys.js +250 -0
- package/dist/tui/screens/ApiKeys.js.map +1 -0
- package/dist/tui/screens/AuditViewer.d.ts +8 -0
- package/dist/tui/screens/AuditViewer.d.ts.map +1 -0
- package/dist/tui/screens/AuditViewer.js +56 -0
- package/dist/tui/screens/AuditViewer.js.map +1 -0
- package/dist/tui/screens/ContextIngressPolicy.d.ts +7 -0
- package/dist/tui/screens/ContextIngressPolicy.d.ts.map +1 -0
- package/dist/tui/screens/ContextIngressPolicy.js +145 -0
- package/dist/tui/screens/ContextIngressPolicy.js.map +1 -0
- package/dist/tui/screens/LiveEvents.d.ts +7 -0
- package/dist/tui/screens/LiveEvents.d.ts.map +1 -0
- package/dist/tui/screens/LiveEvents.js +72 -0
- package/dist/tui/screens/LiveEvents.js.map +1 -0
- package/dist/tui/screens/MainMenu.d.ts +11 -0
- package/dist/tui/screens/MainMenu.d.ts.map +1 -0
- package/dist/tui/screens/MainMenu.js +35 -0
- package/dist/tui/screens/MainMenu.js.map +1 -0
- package/dist/tui/screens/NativeCcPermissions.d.ts +7 -0
- package/dist/tui/screens/NativeCcPermissions.d.ts.map +1 -0
- package/dist/tui/screens/NativeCcPermissions.js +249 -0
- package/dist/tui/screens/NativeCcPermissions.js.map +1 -0
- package/dist/tui/screens/PendingEscalations.d.ts +7 -0
- package/dist/tui/screens/PendingEscalations.d.ts.map +1 -0
- package/dist/tui/screens/PendingEscalations.js +83 -0
- package/dist/tui/screens/PendingEscalations.js.map +1 -0
- package/dist/tui/screens/SecurityBaseline.d.ts +7 -0
- package/dist/tui/screens/SecurityBaseline.d.ts.map +1 -0
- package/dist/tui/screens/SecurityBaseline.js +272 -0
- package/dist/tui/screens/SecurityBaseline.js.map +1 -0
- package/dist/tui/screens/Stats.d.ts +7 -0
- package/dist/tui/screens/Stats.d.ts.map +1 -0
- package/dist/tui/screens/Stats.js +36 -0
- package/dist/tui/screens/Stats.js.map +1 -0
- package/dist/tui/screens/ToolsPolicy.d.ts +7 -0
- package/dist/tui/screens/ToolsPolicy.d.ts.map +1 -0
- package/dist/tui/screens/ToolsPolicy.js +87 -0
- package/dist/tui/screens/ToolsPolicy.js.map +1 -0
- package/dist/tui/screens/ViewConfig.d.ts +9 -0
- package/dist/tui/screens/ViewConfig.d.ts.map +1 -0
- package/dist/tui/screens/ViewConfig.js +117 -0
- package/dist/tui/screens/ViewConfig.js.map +1 -0
- package/dist/tui/strings.d.ts +97 -0
- package/dist/tui/strings.d.ts.map +1 -0
- package/dist/tui/strings.js +104 -0
- package/dist/tui/strings.js.map +1 -0
- package/dist/tui/types.d.ts +5 -0
- package/dist/tui/types.d.ts.map +1 -0
- package/dist/tui/types.js +2 -0
- package/dist/tui/types.js.map +1 -0
- 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 @@
|
|
|
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
|
package/dist/cli.js.map
ADDED
|
@@ -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 @@
|
|
|
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"}
|