@cybedefend/vibedefend 1.1.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 (103) hide show
  1. package/LICENSE +77 -0
  2. package/README.md +120 -0
  3. package/bin/vibedefend.js +19 -0
  4. package/dist/auth/auth-store.js +170 -0
  5. package/dist/auth/auth-store.js.map +1 -0
  6. package/dist/auth/auth.js +125 -0
  7. package/dist/auth/auth.js.map +1 -0
  8. package/dist/auth/callback-server.js +216 -0
  9. package/dist/auth/callback-server.js.map +1 -0
  10. package/dist/auth/pkce.js +31 -0
  11. package/dist/auth/pkce.js.map +1 -0
  12. package/dist/auth/token-exchange.js +83 -0
  13. package/dist/auth/token-exchange.js.map +1 -0
  14. package/dist/clients/claude-code.js +170 -0
  15. package/dist/clients/claude-code.js.map +1 -0
  16. package/dist/clients/codex.js +378 -0
  17. package/dist/clients/codex.js.map +1 -0
  18. package/dist/clients/cursor-guards-rules.js +94 -0
  19. package/dist/clients/cursor-guards-rules.js.map +1 -0
  20. package/dist/clients/cursor.js +172 -0
  21. package/dist/clients/cursor.js.map +1 -0
  22. package/dist/clients/detect.js +86 -0
  23. package/dist/clients/detect.js.map +1 -0
  24. package/dist/clients/registry.js +41 -0
  25. package/dist/clients/registry.js.map +1 -0
  26. package/dist/clients/types.js +2 -0
  27. package/dist/clients/types.js.map +1 -0
  28. package/dist/clients/vscode.js +187 -0
  29. package/dist/clients/vscode.js.map +1 -0
  30. package/dist/clients/windsurf.js +151 -0
  31. package/dist/clients/windsurf.js.map +1 -0
  32. package/dist/config.js +32 -0
  33. package/dist/config.js.map +1 -0
  34. package/dist/custom-regions.js +112 -0
  35. package/dist/custom-regions.js.map +1 -0
  36. package/dist/diagnostics.js +122 -0
  37. package/dist/diagnostics.js.map +1 -0
  38. package/dist/doctor.js +125 -0
  39. package/dist/doctor.js.map +1 -0
  40. package/dist/guards-evaluator/bucketing.js +83 -0
  41. package/dist/guards-evaluator/bucketing.js.map +1 -0
  42. package/dist/guards-evaluator/evaluate.js +272 -0
  43. package/dist/guards-evaluator/evaluate.js.map +1 -0
  44. package/dist/guards-evaluator/glob.js +148 -0
  45. package/dist/guards-evaluator/glob.js.map +1 -0
  46. package/dist/guards-evaluator/index.js +9 -0
  47. package/dist/guards-evaluator/index.js.map +1 -0
  48. package/dist/guards-evaluator/preprocess.js +174 -0
  49. package/dist/guards-evaluator/preprocess.js.map +1 -0
  50. package/dist/guards-evaluator/redact.js +111 -0
  51. package/dist/guards-evaluator/redact.js.map +1 -0
  52. package/dist/guards-evaluator/regex.js +125 -0
  53. package/dist/guards-evaluator/regex.js.map +1 -0
  54. package/dist/guards-evaluator/types.js +2 -0
  55. package/dist/guards-evaluator/types.js.map +1 -0
  56. package/dist/guards-evaluator/validation.js +115 -0
  57. package/dist/guards-evaluator/validation.js.map +1 -0
  58. package/dist/hook-runner.js +6680 -0
  59. package/dist/hooks/install.js +169 -0
  60. package/dist/hooks/install.js.map +1 -0
  61. package/dist/hooks/runtime/api.js +167 -0
  62. package/dist/hooks/runtime/api.js.map +1 -0
  63. package/dist/hooks/runtime/config.js +60 -0
  64. package/dist/hooks/runtime/config.js.map +1 -0
  65. package/dist/hooks/runtime/emit.js +45 -0
  66. package/dist/hooks/runtime/emit.js.map +1 -0
  67. package/dist/hooks/runtime/fetch-rules.js +154 -0
  68. package/dist/hooks/runtime/fetch-rules.js.map +1 -0
  69. package/dist/hooks/runtime/guard-rules-cache.js +217 -0
  70. package/dist/hooks/runtime/guard-rules-cache.js.map +1 -0
  71. package/dist/hooks/runtime/guard-violations-buffer.js +105 -0
  72. package/dist/hooks/runtime/guard-violations-buffer.js.map +1 -0
  73. package/dist/hooks/runtime/pre-compact.js +41 -0
  74. package/dist/hooks/runtime/pre-compact.js.map +1 -0
  75. package/dist/hooks/runtime/resolve.js +206 -0
  76. package/dist/hooks/runtime/resolve.js.map +1 -0
  77. package/dist/hooks/runtime/session-review.js +198 -0
  78. package/dist/hooks/runtime/session-review.js.map +1 -0
  79. package/dist/hooks/runtime/session-start.js +101 -0
  80. package/dist/hooks/runtime/session-start.js.map +1 -0
  81. package/dist/hooks/runtime/sniff.js +112 -0
  82. package/dist/hooks/runtime/sniff.js.map +1 -0
  83. package/dist/hooks/runtime/types.js +22 -0
  84. package/dist/hooks/runtime/types.js.map +1 -0
  85. package/dist/hooks/runtime/user-prompt-submit.js +154 -0
  86. package/dist/hooks/runtime/user-prompt-submit.js.map +1 -0
  87. package/dist/index.js +129 -0
  88. package/dist/index.js.map +1 -0
  89. package/dist/install.js +183 -0
  90. package/dist/install.js.map +1 -0
  91. package/dist/login.js +335 -0
  92. package/dist/login.js.map +1 -0
  93. package/dist/prompts.js +134 -0
  94. package/dist/prompts.js.map +1 -0
  95. package/dist/self-update.js +177 -0
  96. package/dist/self-update.js.map +1 -0
  97. package/dist/status.js +58 -0
  98. package/dist/status.js.map +1 -0
  99. package/dist/utils.js +84 -0
  100. package/dist/utils.js.map +1 -0
  101. package/dist/version.js +23 -0
  102. package/dist/version.js.map +1 -0
  103. package/package.json +73 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../src/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ import { confirm, checkbox, input, select } from '@inquirer/prompts';
2
+ import kleur from 'kleur';
3
+ import { HOOK_DEFAULTS, REGIONS } from './config.js';
4
+ import { detectAll } from './clients/registry.js';
5
+ import { loadCustomRegions } from './custom-regions.js';
6
+ /**
7
+ * Ask the user which region to install against.
8
+ *
9
+ * Built-in choices are Production EU / US. If a `vibedefend.regions.json`
10
+ * file is found (see `src/custom-regions.ts` for lookup order), its
11
+ * entries are prepended to the picker so internal teams can install
12
+ * against staging / localhost / custom clusters without modifying the
13
+ * public CLI.
14
+ */
15
+ export async function askRegion() {
16
+ const customRegions = loadCustomRegions();
17
+ const allRegions = [...customRegions, ...REGIONS];
18
+ const choices = allRegions.map((r) => ({
19
+ name: `${r.label} — ${kleur.dim(r.description)}`,
20
+ value: r,
21
+ short: r.label,
22
+ }));
23
+ return await select({
24
+ message: 'Pick a region:',
25
+ choices,
26
+ });
27
+ }
28
+ /**
29
+ * Hook config sub-flow. All three defaults are tuned from real-world
30
+ * sessions:
31
+ * - session-review ON → without it, gap analysis never runs
32
+ * - threshold = 3 → typos / one-line fixes don't trigger; meaningful
33
+ * features do. Raise if your team does frequent
34
+ * tiny commits in long sessions.
35
+ * - auto-propose OFF → policy mutations require a chat-side "yes" by
36
+ * default. Power users can flip this on if they
37
+ * trust the agent to draft + push proposals
38
+ * without intervention.
39
+ */
40
+ export async function askHookConfig() {
41
+ console.log();
42
+ console.log(kleur.bold('Hook config — automatic gap analysis after coding sessions'));
43
+ console.log(kleur.dim(' Hooks fire at "good moments" (Stop, PreCompact, post_cascade_response, etc.)\n' +
44
+ ' and ask the agent to surface missing business rules to you for approval.'));
45
+ const enableSessionReview = await confirm({
46
+ message: `Enable the Stop hook (gap analysis after each session)? ${kleur.dim('(recommended)')}`,
47
+ default: HOOK_DEFAULTS.enableSessionReview,
48
+ });
49
+ let reviewThreshold = HOOK_DEFAULTS.reviewThreshold;
50
+ if (enableSessionReview) {
51
+ const thresholdStr = await input({
52
+ message: `Edits threshold to trigger gap analysis? ${kleur.dim(`(default ${HOOK_DEFAULTS.reviewThreshold} — recommended from our tests; raise it if too noisy, lower to 1 to fire on every turn)`)}`,
53
+ default: String(HOOK_DEFAULTS.reviewThreshold),
54
+ validate: (v) => {
55
+ const n = Number(v);
56
+ return Number.isFinite(n) && n >= 0 && n <= 100
57
+ ? true
58
+ : 'Enter an integer between 0 and 100.';
59
+ },
60
+ });
61
+ reviewThreshold = Number(thresholdStr);
62
+ }
63
+ const autoProposeMode = await confirm({
64
+ message: `Enable auto-propose mode (agent proposes rules WITHOUT asking you first)? ${kleur.dim('(NOT recommended; default off — proposals normally require an explicit chat-side "yes")')}`,
65
+ default: HOOK_DEFAULTS.autoProposeMode,
66
+ });
67
+ return { enableSessionReview, reviewThreshold, autoProposeMode };
68
+ }
69
+ /**
70
+ * Render a detection result as a one-line status badge for the multi-select.
71
+ */
72
+ function statusBadge(detection) {
73
+ if (!detection.installed)
74
+ return kleur.dim('not detected');
75
+ if (!detection.supportsHooks) {
76
+ return kleur.yellow('detected') + kleur.dim(` — ${detection.reason}`);
77
+ }
78
+ const v = detection.version ? ` v${detection.version}` : '';
79
+ return kleur.green(`detected${v}`);
80
+ }
81
+ /**
82
+ * Multi-select prompt: which agents to install hooks into?
83
+ *
84
+ * UX: print the detection summary table first (one row per adapter with
85
+ * a green/yellow/dim badge), then show the multi-select with ALL agents
86
+ * always present. Initial check state:
87
+ * - detected + supported → pre-checked (the obvious case)
88
+ * - detected + unsupported (version too old) → disabled with the
89
+ * "update <client>" reason inline, no way to select
90
+ * - not detected → unchecked but selectable (user may be
91
+ * about to install that agent and want hooks pre-wired)
92
+ *
93
+ * No follow-up "show undetected?" question — the table above already
94
+ * tells the user what's detected, and the picker doesn't hide anything.
95
+ *
96
+ * Returns the IDs of the selected adapters (matching `ClientAdapter.id`).
97
+ */
98
+ export async function askClientSelection() {
99
+ const detections = detectAll();
100
+ console.log();
101
+ console.log(kleur.bold('Detected coding agents:'));
102
+ for (const { adapter, detection } of detections) {
103
+ console.log(` ${adapter.label.padEnd(22)} ${statusBadge(detection)}`);
104
+ }
105
+ console.log();
106
+ const choices = detections.map(({ adapter, detection }) => {
107
+ const tag = detection.installed
108
+ ? adapter.id
109
+ : `${adapter.id}, not detected`;
110
+ return {
111
+ name: `${adapter.label} ${kleur.dim('(' + tag + ')')}`,
112
+ value: adapter.id,
113
+ short: adapter.label,
114
+ checked: detection.installed && detection.supportsHooks,
115
+ disabled: detection.installed && !detection.supportsHooks
116
+ ? detection.reason || 'unsupported version'
117
+ : false,
118
+ };
119
+ });
120
+ return await checkbox({
121
+ message: 'Which agents do you want to install hooks into? (Space to toggle, Enter to confirm)',
122
+ choices,
123
+ instructions: false,
124
+ loop: false,
125
+ });
126
+ }
127
+ export async function runInstallPrompts() {
128
+ const region = await askRegion();
129
+ const selectedClients = await askClientSelection();
130
+ // If nothing selected, skip hook config — there's nothing to wire.
131
+ const hooks = selectedClients.length > 0 ? await askHookConfig() : null;
132
+ return { region, selectedClients, hooks };
133
+ }
134
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../src/prompts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,177 @@
1
+ /**
2
+ * Self-update: bump the `@cybedefend/vibedefend` binary in-place.
3
+ *
4
+ * Strategy — detect WHERE the running binary lives, then run the right
5
+ * package-manager command to update it:
6
+ * - `/usr/local/lib/node_modules/...` → npm i -g
7
+ * - `~/.nvm/versions/.../lib/node_modules/...` → npm i -g
8
+ * - `~/.local/share/pnpm/...` → pnpm add -g
9
+ * - `~/.yarn/...` → yarn global add
10
+ * - inside `node_modules/.bin/` of a project → tell the user to update
11
+ * the project's package.json
12
+ * - inside `_npx/` cache → no-op (npx fetches latest
13
+ * on every invocation; just
14
+ * tell the user)
15
+ *
16
+ * Returns a structured result so the caller can decide what to print.
17
+ *
18
+ * No version-bump checks here — the caller (commander action) checks
19
+ * `update-notifier` first and only invokes this if a newer version exists,
20
+ * OR the user passed `--force`.
21
+ */
22
+ import { fileURLToPath } from 'node:url';
23
+ import { dirname, sep } from 'node:path';
24
+ import { existsSync } from 'node:fs';
25
+ import { run } from './utils.js';
26
+ /**
27
+ * Detect the install mode from the path the running binary resolves to.
28
+ *
29
+ * We use `process.argv[1]` (the script being run, which is the bin shim
30
+ * `bin/vibedefend.js` for global installs / npx cache, or the resolved
31
+ * symlink target for local installs) rather than `import.meta.url`,
32
+ * because that gives a cleaner answer for project-local installs where
33
+ * `import.meta.url` lives inside `node_modules` either way.
34
+ */
35
+ export function detectInstallMode(scriptPath) {
36
+ // npx cache: pnpm puts it under `.../store/v3/tmp/...` or `.../_npx/`,
37
+ // npm under `~/.npm/_npx/<hash>/`. Both produce a hash-y folder name we
38
+ // can match heuristically.
39
+ if (/(?:[\\/])_npx[\\/]/.test(scriptPath))
40
+ return 'npx-cache';
41
+ if (/(?:[\\/])\.npm[\\/]_npx[\\/]/.test(scriptPath))
42
+ return 'npx-cache';
43
+ // pnpm global: `$PNPM_HOME` / `~/Library/pnpm` / `~/.local/share/pnpm`
44
+ if (/(?:[\\/])pnpm(?:[\\/]global|[\\/]nodejs|[\\/]node_modules)/.test(scriptPath)) {
45
+ return 'pnpm-global';
46
+ }
47
+ if (/[\\/]\.pnpm-global[\\/]/.test(scriptPath))
48
+ return 'pnpm-global';
49
+ // yarn global: `~/.config/yarn/global/node_modules/...`
50
+ if (/[\\/]yarn[\\/]global[\\/]/.test(scriptPath))
51
+ return 'yarn-global';
52
+ // npm global: heuristic — `node_modules` directly under a prefix dir
53
+ // (no nested `node_modules`). Anything under a `lib/node_modules/`
54
+ // (the npm prefix layout) is global.
55
+ if (/[\\/]lib[\\/]node_modules[\\/]@cybedefend[\\/]/.test(scriptPath)) {
56
+ return 'npm-global';
57
+ }
58
+ if (/[\\/]node_modules[\\/]\.bin[\\/]/.test(scriptPath) ||
59
+ /[\\/]node_modules[\\/]@cybedefend[\\/]/.test(scriptPath)) {
60
+ return 'project-local';
61
+ }
62
+ return 'unknown';
63
+ }
64
+ /**
65
+ * Resolve the script path the user actually invoked. Falls back to
66
+ * `import.meta.url`-based resolution if `argv[1]` is missing or doesn't
67
+ * exist on disk (e.g., when invoked from an embedded eval).
68
+ */
69
+ export function resolveScriptPath() {
70
+ const fromArgv = process.argv[1];
71
+ if (fromArgv && existsSync(fromArgv))
72
+ return fromArgv;
73
+ return fileURLToPath(import.meta.url);
74
+ }
75
+ /**
76
+ * Run `npm install -g <pkg>@<version|latest>` (or pnpm/yarn equivalent).
77
+ * Returns the exit code; never throws — the caller decides how to surface
78
+ * the failure to the user.
79
+ */
80
+ function runUpdateCommand(mode, packageSpec) {
81
+ switch (mode) {
82
+ case 'npm-global':
83
+ return run('npm', ['install', '-g', packageSpec]);
84
+ case 'pnpm-global':
85
+ return run('pnpm', ['add', '-g', packageSpec]);
86
+ case 'yarn-global':
87
+ return run('yarn', ['global', 'add', packageSpec]);
88
+ default:
89
+ return null;
90
+ }
91
+ }
92
+ /**
93
+ * High-level entry point used by the commander action. Detects install
94
+ * mode, runs the matching update command, and returns a structured result.
95
+ *
96
+ * Idempotent across re-runs — if the binary is already at the requested
97
+ * version, the package manager is a no-op (npm prints "up to date"),
98
+ * exit code is still 0, and we return `attempted: true` so the caller
99
+ * tells the user "already at the latest version".
100
+ */
101
+ export function selfUpdate(options = {}) {
102
+ const version = options.version ?? 'latest';
103
+ const packageName = options.packageName ?? '@cybedefend/vibedefend';
104
+ const resolvedFrom = options.scriptPath ?? resolveScriptPath();
105
+ const mode = detectInstallMode(resolvedFrom);
106
+ const packageSpec = `${packageName}@${version}`;
107
+ if (mode === 'npx-cache') {
108
+ return {
109
+ mode,
110
+ resolvedFrom,
111
+ attempted: false,
112
+ exitCode: null,
113
+ message: 'Running via npx — every invocation already fetches the latest version. ' +
114
+ 'No self-update needed. To pin a version, run ' +
115
+ `\`npx ${packageName}@<version> install\`.`,
116
+ };
117
+ }
118
+ if (mode === 'project-local') {
119
+ return {
120
+ mode,
121
+ resolvedFrom,
122
+ attempted: false,
123
+ exitCode: null,
124
+ message: 'This binary is installed locally to a project (node_modules/.bin/). ' +
125
+ `Update via the project's package manager: \`pnpm up ${packageName}\` ` +
126
+ `or \`npm i ${packageName}@latest\`.`,
127
+ };
128
+ }
129
+ if (mode === 'unknown') {
130
+ return {
131
+ mode,
132
+ resolvedFrom,
133
+ attempted: false,
134
+ exitCode: null,
135
+ message: `Could not detect how vibedefend is installed (resolved from ${resolvedFrom}). ` +
136
+ `Update manually: \`npm i -g ${packageSpec}\` (or pnpm/yarn equivalent).`,
137
+ };
138
+ }
139
+ const cmd = mode === 'npm-global'
140
+ ? 'npm install -g'
141
+ : mode === 'pnpm-global'
142
+ ? 'pnpm add -g'
143
+ : 'yarn global add';
144
+ const code = runUpdateCommand(mode, packageSpec);
145
+ return {
146
+ mode,
147
+ resolvedFrom,
148
+ attempted: true,
149
+ exitCode: code,
150
+ message: code === 0
151
+ ? `\`${cmd} ${packageSpec}\` succeeded — re-run \`vibedefend update\` to refresh hooks.`
152
+ : `\`${cmd} ${packageSpec}\` exited with ${code ?? '?'}. ` +
153
+ `Try running it manually with elevated privileges (sudo / admin).`,
154
+ };
155
+ }
156
+ /**
157
+ * Path where `runInstall` writes the version that was installed. Read by
158
+ * `hook-session-start.sh` (or any other consumer) to compare against the
159
+ * `latest` advertised by the gateway and surface a nudge.
160
+ */
161
+ export function versionStampPath(homeJoin) {
162
+ return homeJoin('.cybedefend', 'version');
163
+ }
164
+ import { writeFileSync } from 'node:fs';
165
+ import { ensureDirFor } from './utils.js';
166
+ /** Write `~/.cybedefend/version` with the current CLI version. */
167
+ export function stampInstalledVersion(homeJoin, version) {
168
+ const path = versionStampPath(homeJoin);
169
+ ensureDirFor(path);
170
+ writeFileSync(path, version + '\n');
171
+ return path;
172
+ }
173
+ // `dirname` is used by `resolveScriptPath` indirectly through fileURLToPath
174
+ // resolution helpers — keep the import live even if eslint flags it.
175
+ void dirname;
176
+ void sep;
177
+ //# sourceMappingURL=self-update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-update.js","sourceRoot":"","sources":["../src/self-update.ts"],"names":[],"mappings":"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"}
package/dist/status.js ADDED
@@ -0,0 +1,58 @@
1
+ /**
2
+ * `vibedefend status` — read-only install report.
3
+ */
4
+ import kleur from 'kleur';
5
+ import { gatherInstallState } from './diagnostics.js';
6
+ /** Pure renderer — formats an InstallState into a printable report. */
7
+ export function renderStatus(state) {
8
+ const lines = [];
9
+ const yn = (b) => (b ? kleur.green('yes') : kleur.red('no'));
10
+ lines.push(kleur.bold('VibeDefend status'));
11
+ if (!state.installed) {
12
+ lines.push(` ${kleur.red('not installed')} — run \`vibedefend install\`.`);
13
+ return lines.join('\n');
14
+ }
15
+ lines.push(` installed: ${yn(true)} runner: ${yn(state.runnerPresent)}`);
16
+ const stale = state.versionStamped && state.versionStamped !== state.versionCurrent;
17
+ lines.push(` version: ${state.versionStamped ?? '?'}` +
18
+ (stale ? kleur.yellow(` (stale — current ${state.versionCurrent})`) : ''));
19
+ if (state.region) {
20
+ lines.push(` region: ${kleur.bold(state.region.label)} (${state.region.apiBase})`);
21
+ }
22
+ lines.push(kleur.bold(' Agents'));
23
+ for (const c of state.clients) {
24
+ lines.push(` ${c.id.padEnd(12)} detected:${yn(c.detected)} hooks:${yn(c.hooksWired)} mcp:${yn(c.mcpRegistered)}`);
25
+ }
26
+ lines.push(kleur.bold(' Live check'));
27
+ if (!state.live) {
28
+ lines.push(' (not run)');
29
+ }
30
+ else {
31
+ const l = state.live;
32
+ let msg;
33
+ switch (l.status) {
34
+ case 'ok':
35
+ msg = kleur.green('API reachable, token valid');
36
+ break;
37
+ case 'token_invalid':
38
+ msg = kleur.red('token invalid (401/403) — re-run `vibedefend install`');
39
+ break;
40
+ case 'unreachable':
41
+ msg = kleur.red('API unreachable');
42
+ break;
43
+ case 'skipped':
44
+ msg = kleur.yellow(`skipped — ${l.reason}`);
45
+ break;
46
+ case 'error':
47
+ msg = kleur.red(`error — ${l.detail}`);
48
+ break;
49
+ }
50
+ lines.push(` ${msg}`);
51
+ }
52
+ return lines.join('\n');
53
+ }
54
+ export async function runStatus() {
55
+ const state = await gatherInstallState({ live: true });
56
+ console.log(renderStatus(state));
57
+ }
58
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../src/status.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,kBAAkB,EAAqB,MAAM,kBAAkB,CAAC;AAEzE,uEAAuE;AACvE,MAAM,UAAU,YAAY,CAAC,KAAmB;IAC9C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,EAAE,GAAG,CAAC,CAAU,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IAEtE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAC;IAC5C,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;QACrB,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,gCAAgC,CAAC,CAAC;QAC5E,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAC5E,MAAM,KAAK,GAAG,KAAK,CAAC,cAAc,IAAI,KAAK,CAAC,cAAc,KAAK,KAAK,CAAC,cAAc,CAAC;IACpF,KAAK,CAAC,IAAI,CACR,cAAc,KAAK,CAAC,cAAc,IAAI,GAAG,EAAE;QACzC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,qBAAqB,KAAK,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAC5E,CAAC;IACF,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,KAAK,CAAC,IAAI,CAAC,aAAa,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;IACtF,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;IACnC,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CACR,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,EAAE,CACzG,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IACvC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC9B,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC;QACrB,IAAI,GAAW,CAAC;QAChB,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC;YACjB,KAAK,IAAI;gBACP,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;gBAChD,MAAM;YACR,KAAK,eAAe;gBAClB,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;gBACzE,MAAM;YACR,KAAK,aAAa;gBAChB,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;gBACnC,MAAM;YACR,KAAK,SAAS;gBACZ,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC5C,MAAM;YACR,KAAK,OAAO;gBACV,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;gBACvC,MAAM;QACV,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AACnC,CAAC"}
package/dist/utils.js ADDED
@@ -0,0 +1,84 @@
1
+ import { execSync, spawnSync } from 'node:child_process';
2
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
3
+ import { dirname, join } from 'node:path';
4
+ import { homedir, platform } from 'node:os';
5
+ import kleur from 'kleur';
6
+ /** Detect the current OS family so we can pick bash hooks vs PowerShell. */
7
+ export function detectPlatform() {
8
+ const p = platform();
9
+ if (p === 'darwin' || p === 'linux' || p === 'win32')
10
+ return p;
11
+ return 'unknown';
12
+ }
13
+ /** Resolve `~` to absolute home. Used everywhere for `~/.claude/...` paths. */
14
+ export function home(...parts) {
15
+ return join(homedir(), ...parts);
16
+ }
17
+ /** Ensure the directory containing a file exists. Safe to call repeatedly. */
18
+ export function ensureDirFor(filePath) {
19
+ const dir = dirname(filePath);
20
+ if (!existsSync(dir))
21
+ mkdirSync(dir, { recursive: true });
22
+ }
23
+ /** Read JSON, defaulting to `{}` if absent. Surfaces parse errors. */
24
+ export function readJson(filePath, fallback) {
25
+ if (!existsSync(filePath))
26
+ return fallback;
27
+ const raw = readFileSync(filePath, 'utf8');
28
+ if (!raw.trim())
29
+ return fallback;
30
+ try {
31
+ return JSON.parse(raw);
32
+ }
33
+ catch (err) {
34
+ throw new Error(`Failed to parse JSON at ${filePath}: ${err.message}`);
35
+ }
36
+ }
37
+ /** Write JSON with two-space indent + trailing newline. */
38
+ export function writeJson(filePath, data) {
39
+ ensureDirFor(filePath);
40
+ writeFileSync(filePath, JSON.stringify(data, null, 2) + '\n');
41
+ }
42
+ /**
43
+ * Best-effort `which`. Returns the absolute path or `null` if the binary
44
+ * isn't on PATH. Used to detect Claude Code's `claude` CLI before we try
45
+ * `claude mcp add`.
46
+ */
47
+ export function which(binary) {
48
+ const cmd = detectPlatform() === 'win32' ? 'where' : 'command -v';
49
+ try {
50
+ const out = execSync(`${cmd} ${binary}`, {
51
+ stdio: ['ignore', 'pipe', 'ignore'],
52
+ })
53
+ .toString()
54
+ .trim()
55
+ .split('\n')[0];
56
+ return out || null;
57
+ }
58
+ catch {
59
+ return null;
60
+ }
61
+ }
62
+ /**
63
+ * Run a command, streaming stdout/stderr to the user's terminal. Returns
64
+ * the exit code. We use spawnSync so `claude mcp add ...` can interact
65
+ * with the user (e.g., open a browser for OAuth).
66
+ */
67
+ export function run(command, args, opts = {}) {
68
+ const result = spawnSync(command, args, {
69
+ cwd: opts.cwd,
70
+ stdio: opts.silent ? 'ignore' : 'inherit',
71
+ shell: false,
72
+ });
73
+ return result.status ?? 1;
74
+ }
75
+ /** Stylised logger. Keeps the install output tidy. */
76
+ export const log = {
77
+ info: (msg) => console.log(kleur.cyan('ℹ ') + msg),
78
+ ok: (msg) => console.log(kleur.green('✓ ') + msg),
79
+ warn: (msg) => console.log(kleur.yellow('⚠ ') + msg),
80
+ err: (msg) => console.error(kleur.red('✗ ') + msg),
81
+ step: (msg) => console.log('\n' + kleur.bold().magenta('▸ ' + msg)),
82
+ hint: (msg) => console.log(kleur.dim(' ' + msg)),
83
+ };
84
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Read the running binary's `package.json` once at module load.
3
+ *
4
+ * Used by:
5
+ * - `commander.version(...)` so `vibedefend --version` prints the npm
6
+ * package's version (never drifts from package.json — single source).
7
+ * - `update-notifier`, which needs the `{ name, version }` pair to query
8
+ * the registry for newer versions.
9
+ * - `stampInstalledVersion` (self-update.ts) which writes the stamp file
10
+ * `~/.cybedefend/version` after every successful install/update.
11
+ *
12
+ * Path resolution: `import.meta.url` resolves to either
13
+ * `dist/version.js` (production) or `src/version.ts` (dev via `tsx`).
14
+ * In both cases `..` from that file lands on the package root where
15
+ * `package.json` lives. No env-aware branching needed.
16
+ */
17
+ import { readFileSync } from 'node:fs';
18
+ import { fileURLToPath } from 'node:url';
19
+ import { dirname, join } from 'node:path';
20
+ const here = dirname(fileURLToPath(import.meta.url));
21
+ const pkgPath = join(here, '..', 'package.json');
22
+ export const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
23
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACrD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;AAOjD,MAAM,CAAC,MAAM,GAAG,GAAgB,IAAI,CAAC,KAAK,CACxC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CACf,CAAC"}
package/package.json ADDED
@@ -0,0 +1,73 @@
1
+ {
2
+ "name": "@cybedefend/vibedefend",
3
+ "version": "1.1.1",
4
+ "description": "VibeDefend — one-shot installer for CybeDefend's MCP server and Claude Code / Cursor / Codex / Windsurf hooks (for AI coding agents).",
5
+ "type": "module",
6
+ "bin": {
7
+ "vibedefend": "bin/vibedefend.js"
8
+ },
9
+ "files": [
10
+ "bin",
11
+ "dist",
12
+ "README.md",
13
+ "LICENSE"
14
+ ],
15
+ "scripts": {
16
+ "build": "tsc && node scripts/build-hook-runner.mjs",
17
+ "build:tsc": "tsc",
18
+ "build:hooks": "node scripts/build-hook-runner.mjs",
19
+ "test": "vitest run",
20
+ "test:watch": "vitest",
21
+ "dev": "tsx src/index.ts",
22
+ "prepack": "npm run build",
23
+ "prepublishOnly": "npm test && npm run build"
24
+ },
25
+ "engines": {
26
+ "node": ">=18.17"
27
+ },
28
+ "dependencies": {
29
+ "@inquirer/prompts": "^7.2.1",
30
+ "commander": "^12.1.0",
31
+ "kleur": "^4.1.5",
32
+ "re2-wasm": "^1.0.2",
33
+ "shell-quote": "^1.8.3",
34
+ "update-notifier": "^7.3.1"
35
+ },
36
+ "devDependencies": {
37
+ "@types/node": "^20.14.0",
38
+ "@types/shell-quote": "^1.7.5",
39
+ "@types/update-notifier": "^6.0.8",
40
+ "esbuild": "^0.28.0",
41
+ "tsx": "^4.20.6",
42
+ "typescript": "^5.6.0",
43
+ "vitest": "^2.1.0"
44
+ },
45
+ "license": "BUSL-1.1",
46
+ "repository": {
47
+ "type": "git",
48
+ "url": "https://github.com/CybeDefend/vibedefend.git"
49
+ },
50
+ "homepage": "https://github.com/CybeDefend/vibedefend#readme",
51
+ "bugs": {
52
+ "url": "https://github.com/CybeDefend/vibedefend/issues"
53
+ },
54
+ "publishConfig": {
55
+ "access": "public",
56
+ "registry": "https://registry.npmjs.org/"
57
+ },
58
+ "keywords": [
59
+ "cybedefend",
60
+ "vibedefend",
61
+ "vibe-coding",
62
+ "mcp",
63
+ "model-context-protocol",
64
+ "claude-code",
65
+ "cursor",
66
+ "codex",
67
+ "windsurf",
68
+ "security",
69
+ "business-rules",
70
+ "ai-coding-agent",
71
+ "hooks"
72
+ ]
73
+ }