veto-leash 0.1.0

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 (135) hide show
  1. package/IMPLEMENTATION_PLAN.md +2194 -0
  2. package/LICENSE +201 -0
  3. package/README.md +260 -0
  4. package/dist/audit/index.d.ts +38 -0
  5. package/dist/audit/index.d.ts.map +1 -0
  6. package/dist/audit/index.js +132 -0
  7. package/dist/audit/index.js.map +1 -0
  8. package/dist/cli.d.ts +3 -0
  9. package/dist/cli.d.ts.map +1 -0
  10. package/dist/cli.js +406 -0
  11. package/dist/cli.js.map +1 -0
  12. package/dist/cloud/index.d.ts +40 -0
  13. package/dist/cloud/index.d.ts.map +1 -0
  14. package/dist/cloud/index.js +115 -0
  15. package/dist/cloud/index.js.map +1 -0
  16. package/dist/compiler/builtins.d.ts +6 -0
  17. package/dist/compiler/builtins.d.ts.map +1 -0
  18. package/dist/compiler/builtins.js +129 -0
  19. package/dist/compiler/builtins.js.map +1 -0
  20. package/dist/compiler/cache.d.ts +6 -0
  21. package/dist/compiler/cache.d.ts.map +1 -0
  22. package/dist/compiler/cache.js +49 -0
  23. package/dist/compiler/cache.js.map +1 -0
  24. package/dist/compiler/index.d.ts +3 -0
  25. package/dist/compiler/index.d.ts.map +1 -0
  26. package/dist/compiler/index.js +48 -0
  27. package/dist/compiler/index.js.map +1 -0
  28. package/dist/compiler/llm.d.ts +3 -0
  29. package/dist/compiler/llm.d.ts.map +1 -0
  30. package/dist/compiler/llm.js +69 -0
  31. package/dist/compiler/llm.js.map +1 -0
  32. package/dist/compiler/prompt.d.ts +2 -0
  33. package/dist/compiler/prompt.d.ts.map +1 -0
  34. package/dist/compiler/prompt.js +37 -0
  35. package/dist/compiler/prompt.js.map +1 -0
  36. package/dist/config/loader.d.ts +22 -0
  37. package/dist/config/loader.d.ts.map +1 -0
  38. package/dist/config/loader.js +100 -0
  39. package/dist/config/loader.js.map +1 -0
  40. package/dist/config/schema.d.ts +42 -0
  41. package/dist/config/schema.d.ts.map +1 -0
  42. package/dist/config/schema.js +93 -0
  43. package/dist/config/schema.js.map +1 -0
  44. package/dist/matcher.d.ts +22 -0
  45. package/dist/matcher.d.ts.map +1 -0
  46. package/dist/matcher.js +69 -0
  47. package/dist/matcher.js.map +1 -0
  48. package/dist/native/aider.d.ts +10 -0
  49. package/dist/native/aider.d.ts.map +1 -0
  50. package/dist/native/aider.js +120 -0
  51. package/dist/native/aider.js.map +1 -0
  52. package/dist/native/claude-code.d.ts +14 -0
  53. package/dist/native/claude-code.d.ts.map +1 -0
  54. package/dist/native/claude-code.js +273 -0
  55. package/dist/native/claude-code.js.map +1 -0
  56. package/dist/native/cursor.d.ts +11 -0
  57. package/dist/native/cursor.d.ts.map +1 -0
  58. package/dist/native/cursor.js +105 -0
  59. package/dist/native/cursor.js.map +1 -0
  60. package/dist/native/index.d.ts +35 -0
  61. package/dist/native/index.d.ts.map +1 -0
  62. package/dist/native/index.js +171 -0
  63. package/dist/native/index.js.map +1 -0
  64. package/dist/native/opencode.d.ts +22 -0
  65. package/dist/native/opencode.d.ts.map +1 -0
  66. package/dist/native/opencode.js +225 -0
  67. package/dist/native/opencode.js.map +1 -0
  68. package/dist/native/windsurf.d.ts +14 -0
  69. package/dist/native/windsurf.d.ts.map +1 -0
  70. package/dist/native/windsurf.js +198 -0
  71. package/dist/native/windsurf.js.map +1 -0
  72. package/dist/types.d.ts +38 -0
  73. package/dist/types.d.ts.map +1 -0
  74. package/dist/types.js +11 -0
  75. package/dist/types.js.map +1 -0
  76. package/dist/ui/colors.d.ts +21 -0
  77. package/dist/ui/colors.d.ts.map +1 -0
  78. package/dist/ui/colors.js +41 -0
  79. package/dist/ui/colors.js.map +1 -0
  80. package/dist/watchdog/index.d.ts +25 -0
  81. package/dist/watchdog/index.d.ts.map +1 -0
  82. package/dist/watchdog/index.js +57 -0
  83. package/dist/watchdog/index.js.map +1 -0
  84. package/dist/watchdog/restore.d.ts +16 -0
  85. package/dist/watchdog/restore.d.ts.map +1 -0
  86. package/dist/watchdog/restore.js +56 -0
  87. package/dist/watchdog/restore.js.map +1 -0
  88. package/dist/watchdog/snapshot.d.ts +38 -0
  89. package/dist/watchdog/snapshot.d.ts.map +1 -0
  90. package/dist/watchdog/snapshot.js +166 -0
  91. package/dist/watchdog/snapshot.js.map +1 -0
  92. package/dist/watchdog/watcher.d.ts +28 -0
  93. package/dist/watchdog/watcher.d.ts.map +1 -0
  94. package/dist/watchdog/watcher.js +117 -0
  95. package/dist/watchdog/watcher.js.map +1 -0
  96. package/dist/wrapper/daemon.d.ts +12 -0
  97. package/dist/wrapper/daemon.d.ts.map +1 -0
  98. package/dist/wrapper/daemon.js +103 -0
  99. package/dist/wrapper/daemon.js.map +1 -0
  100. package/dist/wrapper/shims.d.ts +4 -0
  101. package/dist/wrapper/shims.d.ts.map +1 -0
  102. package/dist/wrapper/shims.js +390 -0
  103. package/dist/wrapper/shims.js.map +1 -0
  104. package/dist/wrapper/spawn.d.ts +4 -0
  105. package/dist/wrapper/spawn.d.ts.map +1 -0
  106. package/dist/wrapper/spawn.js +35 -0
  107. package/dist/wrapper/spawn.js.map +1 -0
  108. package/package.json +46 -0
  109. package/src/audit/index.ts +172 -0
  110. package/src/cli.ts +503 -0
  111. package/src/cloud/index.ts +139 -0
  112. package/src/compiler/builtins.ts +137 -0
  113. package/src/compiler/cache.ts +51 -0
  114. package/src/compiler/index.ts +59 -0
  115. package/src/compiler/llm.ts +83 -0
  116. package/src/compiler/prompt.ts +37 -0
  117. package/src/config/loader.ts +126 -0
  118. package/src/config/schema.ts +136 -0
  119. package/src/matcher.ts +89 -0
  120. package/src/native/aider.ts +150 -0
  121. package/src/native/claude-code.ts +308 -0
  122. package/src/native/cursor.ts +131 -0
  123. package/src/native/index.ts +233 -0
  124. package/src/native/opencode.ts +310 -0
  125. package/src/native/windsurf.ts +231 -0
  126. package/src/types.ts +48 -0
  127. package/src/ui/colors.ts +50 -0
  128. package/src/watchdog/index.ts +82 -0
  129. package/src/watchdog/restore.ts +74 -0
  130. package/src/watchdog/snapshot.ts +209 -0
  131. package/src/watchdog/watcher.ts +150 -0
  132. package/src/wrapper/daemon.ts +133 -0
  133. package/src/wrapper/shims.ts +409 -0
  134. package/src/wrapper/spawn.ts +47 -0
  135. package/tsconfig.json +20 -0
package/dist/cli.js ADDED
@@ -0,0 +1,406 @@
1
+ #!/usr/bin/env node
2
+ // src/cli.ts
3
+ import { compile } from './compiler/index.js';
4
+ import { VetoDaemon } from './wrapper/daemon.js';
5
+ import { createWrapperDir, cleanupWrapperDir } from './wrapper/shims.js';
6
+ import { spawnAgent } from './wrapper/spawn.js';
7
+ import { COLORS, SYMBOLS, createSpinner } from './ui/colors.js';
8
+ import { clearCache } from './compiler/cache.js';
9
+ import { installAgent, uninstallAgent, addPolicyToAgents, listPolicies, AGENTS, } from './native/index.js';
10
+ import { startWatchdog, stopWatchdog } from './watchdog/index.js';
11
+ import { findLeashConfig, loadLeashConfig, compileLeashConfig, createLeashConfig, } from './config/loader.js';
12
+ import { printAuditLog, clearAuditLog } from './audit/index.js';
13
+ import { login as cloudLogin, printCloudStatus } from './cloud/index.js';
14
+ const VERSION = '0.1.0';
15
+ async function main() {
16
+ const args = process.argv.slice(2);
17
+ // Handle flags
18
+ if (args.includes('--help') || args.includes('-h') || args.length === 0) {
19
+ printHelp();
20
+ process.exit(0);
21
+ }
22
+ if (args.includes('--version') || args.includes('-v')) {
23
+ console.log(`veto-leash v${VERSION}`);
24
+ process.exit(0);
25
+ }
26
+ const command = args[0];
27
+ // Route commands
28
+ switch (command) {
29
+ case 'watch':
30
+ await runWatchdog(args.slice(1).join(' '));
31
+ break;
32
+ case 'explain':
33
+ await runExplain(args.slice(1).join(' '));
34
+ break;
35
+ case 'status':
36
+ runStatus();
37
+ break;
38
+ case 'install':
39
+ await runInstall(args[1]);
40
+ break;
41
+ case 'add':
42
+ await runAdd(args.slice(1).join(' '));
43
+ break;
44
+ case 'list':
45
+ runList();
46
+ break;
47
+ case 'uninstall':
48
+ await runUninstall(args[1]);
49
+ break;
50
+ case 'init':
51
+ runInit();
52
+ break;
53
+ case 'sync':
54
+ await runSync(args[1]);
55
+ break;
56
+ case 'audit':
57
+ await runAudit(args.includes('--clear'), args.includes('--tail'));
58
+ break;
59
+ case 'login':
60
+ await cloudLogin();
61
+ break;
62
+ case 'cloud':
63
+ printCloudStatus();
64
+ break;
65
+ case 'clear':
66
+ runClear();
67
+ break;
68
+ default:
69
+ // Default: wrap agent
70
+ await runWrapper(command, args.slice(1).join(' '));
71
+ }
72
+ }
73
+ async function runWrapper(agent, restriction) {
74
+ if (!restriction) {
75
+ console.error(`${COLORS.error}${SYMBOLS.error} Error: No restriction provided${COLORS.reset}\n`);
76
+ console.log('Usage: leash <agent> "<restriction>"\n');
77
+ console.log("Example: leash cc \"don't delete test files\"");
78
+ process.exit(1);
79
+ }
80
+ // Check for API key (only needed if not using builtins)
81
+ // We'll check later if LLM is actually needed
82
+ // Compile restriction
83
+ const spinner = createSpinner('Compiling restriction...');
84
+ let policy;
85
+ try {
86
+ policy = await compile(restriction);
87
+ spinner.stop();
88
+ }
89
+ catch (err) {
90
+ spinner.stop();
91
+ if (err.message === 'GEMINI_API_KEY not set') {
92
+ console.error(`${COLORS.error}${SYMBOLS.error} Error: GEMINI_API_KEY not set${COLORS.reset}\n`);
93
+ console.log(' Get a free API key (15 requests/min, 1M tokens/month):');
94
+ console.log(' https://aistudio.google.com/apikey\n');
95
+ console.log(' Then run:');
96
+ console.log(' export GEMINI_API_KEY="your-key"\n');
97
+ process.exit(1);
98
+ }
99
+ console.error(`${COLORS.error}${SYMBOLS.error} Error: Failed to compile restriction${COLORS.reset}\n`);
100
+ console.log(` ${err.message}\n`);
101
+ process.exit(1);
102
+ }
103
+ // Print startup message
104
+ console.log(`\n${COLORS.success}${SYMBOLS.success} veto-leash active${COLORS.reset}\n`);
105
+ console.log(` ${COLORS.dim}Policy:${COLORS.reset} ${policy.description}`);
106
+ console.log(` ${COLORS.dim}Action:${COLORS.reset} ${policy.action}\n`);
107
+ console.log(` ${COLORS.dim}Protecting:${COLORS.reset}`);
108
+ console.log(` ${policy.include.slice(0, 5).join(' ')}`);
109
+ if (policy.include.length > 5) {
110
+ console.log(` ${COLORS.dim}...and ${policy.include.length - 5} more${COLORS.reset}`);
111
+ }
112
+ if (policy.exclude.length > 0) {
113
+ console.log(`\n ${COLORS.dim}Allowing (exceptions):${COLORS.reset}`);
114
+ console.log(` ${policy.exclude.join(' ')}`);
115
+ }
116
+ console.log(`\n Press Ctrl+C to exit\n`);
117
+ // Start daemon
118
+ const daemon = new VetoDaemon(policy, agent);
119
+ const port = await daemon.start();
120
+ // Create wrapper scripts
121
+ const wrapperDir = createWrapperDir(port, policy);
122
+ // Handle cleanup
123
+ const cleanup = () => {
124
+ daemon.stop();
125
+ cleanupWrapperDir(wrapperDir);
126
+ };
127
+ process.on('SIGINT', () => {
128
+ cleanup();
129
+ process.exit(0);
130
+ });
131
+ process.on('SIGTERM', () => {
132
+ cleanup();
133
+ process.exit(0);
134
+ });
135
+ // Spawn agent
136
+ spawnAgent(agent, wrapperDir, port, (code) => {
137
+ cleanup();
138
+ process.exit(code);
139
+ });
140
+ }
141
+ async function runExplain(restriction) {
142
+ if (!restriction) {
143
+ console.error(`${COLORS.error}${SYMBOLS.error} Error: No restriction provided${COLORS.reset}`);
144
+ process.exit(1);
145
+ }
146
+ const spinner = createSpinner('Analyzing restriction...');
147
+ let policy;
148
+ try {
149
+ policy = await compile(restriction);
150
+ spinner.stop();
151
+ }
152
+ catch (err) {
153
+ spinner.stop();
154
+ if (err.message === 'GEMINI_API_KEY not set') {
155
+ console.error(`${COLORS.error}${SYMBOLS.error} Error: GEMINI_API_KEY not set${COLORS.reset}\n`);
156
+ console.log(' Get a free API key: https://aistudio.google.com/apikey\n');
157
+ process.exit(1);
158
+ }
159
+ throw err;
160
+ }
161
+ console.log(`\n${COLORS.bold}Policy Preview${COLORS.reset}`);
162
+ console.log('\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n');
163
+ console.log(`Restriction: "${restriction}"\n`);
164
+ console.log(`Action: ${policy.action}\n`);
165
+ console.log(`Patterns:`);
166
+ console.log(` ${COLORS.dim}include:${COLORS.reset} ${policy.include.join(', ')}`);
167
+ console.log(` ${COLORS.dim}exclude:${COLORS.reset} ${policy.exclude.join(', ') || '(none)'}`);
168
+ console.log(`\nDescription: ${policy.description}`);
169
+ console.log(`\nRun 'leash <agent> "${restriction}"' to enforce.\n`);
170
+ }
171
+ async function runWatchdog(restriction) {
172
+ if (!restriction) {
173
+ console.error(`${COLORS.error}${SYMBOLS.error} Error: No restriction provided${COLORS.reset}`);
174
+ process.exit(1);
175
+ }
176
+ // Compile restriction
177
+ const spinner = createSpinner('Compiling restriction...');
178
+ let policy;
179
+ try {
180
+ policy = await compile(restriction);
181
+ spinner.stop();
182
+ }
183
+ catch (err) {
184
+ spinner.stop();
185
+ if (err.message === 'GEMINI_API_KEY not set') {
186
+ console.error(`${COLORS.error}${SYMBOLS.error} Error: GEMINI_API_KEY not set${COLORS.reset}\n`);
187
+ console.log(' Get a free API key: https://aistudio.google.com/apikey\n');
188
+ process.exit(1);
189
+ }
190
+ throw err;
191
+ }
192
+ // Start watchdog
193
+ const snapshotSpinner = createSpinner('Creating file snapshots...');
194
+ const session = await startWatchdog(process.cwd(), policy);
195
+ snapshotSpinner.stop();
196
+ // Print startup message
197
+ console.log(`\n${COLORS.success}${SYMBOLS.success} veto-leash watchdog active${COLORS.reset}\n`);
198
+ console.log(` ${COLORS.dim}Policy:${COLORS.reset} ${policy.description}`);
199
+ console.log(` ${COLORS.dim}Action:${COLORS.reset} ${policy.action}`);
200
+ console.log(` ${COLORS.dim}Files protected:${COLORS.reset} ${session.snapshot.files.size}\n`);
201
+ console.log(` ${COLORS.dim}Protecting:${COLORS.reset}`);
202
+ console.log(` ${policy.include.slice(0, 5).join(' ')}`);
203
+ if (policy.include.length > 5) {
204
+ console.log(` ${COLORS.dim}...and ${policy.include.length - 5} more patterns${COLORS.reset}`);
205
+ }
206
+ console.log(`\n ${COLORS.info}Watching for changes. Auto-restore on violation.${COLORS.reset}`);
207
+ console.log(` Press Ctrl+C to exit\n`);
208
+ // Handle cleanup
209
+ process.on('SIGINT', async () => {
210
+ await stopWatchdog(session);
211
+ process.exit(0);
212
+ });
213
+ process.on('SIGTERM', async () => {
214
+ await stopWatchdog(session);
215
+ process.exit(0);
216
+ });
217
+ // Keep process alive
218
+ await new Promise(() => { });
219
+ }
220
+ function runStatus() {
221
+ console.log(`\n${COLORS.bold}veto-leash Status${COLORS.reset}`);
222
+ console.log('\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\n');
223
+ console.log('No active sessions.\n');
224
+ }
225
+ async function runInstall(agent) {
226
+ if (!agent) {
227
+ console.error(`${COLORS.error}${SYMBOLS.error} No agent specified${COLORS.reset}`);
228
+ console.log(`\nSupported agents:`);
229
+ for (const a of AGENTS) {
230
+ const status = a.hasNativeHooks ? `${COLORS.success}native${COLORS.reset}` : `${COLORS.dim}guidance${COLORS.reset}`;
231
+ console.log(` ${COLORS.dim}${a.aliases[0].padEnd(12)}${COLORS.reset} ${a.name} (${status})`);
232
+ }
233
+ console.log('');
234
+ process.exit(1);
235
+ }
236
+ const isGlobal = agent.endsWith('-global');
237
+ const agentId = isGlobal ? agent.replace('-global', '') : agent;
238
+ const success = await installAgent(agentId, { global: isGlobal });
239
+ if (!success) {
240
+ process.exit(1);
241
+ }
242
+ }
243
+ async function runAdd(restriction) {
244
+ if (!restriction) {
245
+ console.error(`${COLORS.error}${SYMBOLS.error} Error: No restriction provided${COLORS.reset}`);
246
+ process.exit(1);
247
+ }
248
+ const spinner = createSpinner('Compiling restriction...');
249
+ let policy;
250
+ try {
251
+ policy = await compile(restriction);
252
+ spinner.stop();
253
+ }
254
+ catch (err) {
255
+ spinner.stop();
256
+ if (err.message === 'GEMINI_API_KEY not set') {
257
+ console.error(`${COLORS.error}${SYMBOLS.error} Error: GEMINI_API_KEY not set${COLORS.reset}\n`);
258
+ console.log(' Get a free API key: https://aistudio.google.com/apikey\n');
259
+ process.exit(1);
260
+ }
261
+ throw err;
262
+ }
263
+ // Generate policy name from restriction
264
+ const policyName = restriction
265
+ .toLowerCase()
266
+ .replace(/[^a-z0-9]+/g, '-')
267
+ .replace(/^-|-$/g, '')
268
+ .slice(0, 50);
269
+ // Save to all agent policy stores
270
+ await addPolicyToAgents(policy, policyName);
271
+ console.log(`\n${COLORS.success}${SYMBOLS.success} Policy added${COLORS.reset}\n`);
272
+ console.log(` ${COLORS.dim}Restriction:${COLORS.reset} "${restriction}"`);
273
+ console.log(` ${COLORS.dim}Action:${COLORS.reset} ${policy.action}`);
274
+ console.log(` ${COLORS.dim}Patterns:${COLORS.reset} ${policy.include.join(', ')}`);
275
+ console.log(`\nTo enforce, install for your agent:`);
276
+ console.log(` ${COLORS.dim}leash install cc${COLORS.reset} Claude Code`);
277
+ console.log(` ${COLORS.dim}leash install windsurf${COLORS.reset} Windsurf`);
278
+ console.log(` ${COLORS.dim}leash install oc${COLORS.reset} OpenCode\n`);
279
+ }
280
+ function runList() {
281
+ listPolicies();
282
+ }
283
+ async function runUninstall(agent) {
284
+ if (!agent) {
285
+ console.error(`${COLORS.error}${SYMBOLS.error} No agent specified${COLORS.reset}`);
286
+ process.exit(1);
287
+ }
288
+ const isGlobal = agent.endsWith('-global');
289
+ const agentId = isGlobal ? agent.replace('-global', '') : agent;
290
+ const success = await uninstallAgent(agentId, { global: isGlobal });
291
+ if (!success) {
292
+ process.exit(1);
293
+ }
294
+ }
295
+ function runInit() {
296
+ createLeashConfig();
297
+ console.log(`\nEdit .leash to customize your policies.`);
298
+ console.log(`Then run: ${COLORS.dim}leash sync${COLORS.reset}\n`);
299
+ }
300
+ async function runSync(agent) {
301
+ const configPath = findLeashConfig();
302
+ if (!configPath) {
303
+ console.error(`${COLORS.error}${SYMBOLS.error} No .leash config found${COLORS.reset}`);
304
+ console.log(`Run: ${COLORS.dim}leash init${COLORS.reset}`);
305
+ process.exit(1);
306
+ }
307
+ const config = loadLeashConfig(configPath);
308
+ if (!config) {
309
+ process.exit(1);
310
+ }
311
+ console.log(`\n${COLORS.info}Loading ${configPath}...${COLORS.reset}`);
312
+ // Compile all policies
313
+ const compiled = await compileLeashConfig(config);
314
+ console.log(`${COLORS.success}${SYMBOLS.success} Compiled ${compiled.policies.length} policies${COLORS.reset}\n`);
315
+ // Save each policy
316
+ for (const { restriction, policy } of compiled.policies) {
317
+ const policyName = restriction
318
+ .toLowerCase()
319
+ .replace(/[^a-z0-9]+/g, '-')
320
+ .replace(/^-|-$/g, '')
321
+ .slice(0, 50);
322
+ await addPolicyToAgents(policy, policyName);
323
+ }
324
+ // If agent specified, install for that agent
325
+ if (agent) {
326
+ console.log('');
327
+ await installAgent(agent);
328
+ }
329
+ else {
330
+ console.log(`To install for an agent:`);
331
+ console.log(` ${COLORS.dim}leash install cc${COLORS.reset} Claude Code`);
332
+ console.log(` ${COLORS.dim}leash install windsurf${COLORS.reset} Windsurf`);
333
+ console.log(` ${COLORS.dim}leash install oc${COLORS.reset} OpenCode\n`);
334
+ }
335
+ }
336
+ async function runAudit(clear, tail) {
337
+ if (clear) {
338
+ clearAuditLog();
339
+ return;
340
+ }
341
+ await printAuditLog(50, tail);
342
+ }
343
+ function runClear() {
344
+ clearCache();
345
+ console.log(`${COLORS.success}${SYMBOLS.success} Cache cleared${COLORS.reset}`);
346
+ }
347
+ function printHelp() {
348
+ console.log(`
349
+ ${COLORS.bold}veto-leash${COLORS.reset} \u2014 sudo for AI agents
350
+
351
+ ${COLORS.bold}USAGE${COLORS.reset}
352
+ leash <agent> "<restriction>" Wrap agent with policy enforcement
353
+ leash watch "<restriction>" Background file protection (any agent)
354
+ leash explain "<restriction>" Preview policy without installing
355
+ leash add "<restriction>" Save policy for native install
356
+ leash init Create .leash config file
357
+ leash sync [agent] Apply .leash policies to agents
358
+ leash install <agent> Install native hooks/config
359
+ leash uninstall <agent> Remove native hooks/config
360
+ leash list Show saved policies
361
+ leash audit [--tail] [--clear] View or clear audit log
362
+ leash status Show active sessions
363
+ leash clear Clear compilation cache
364
+
365
+ ${COLORS.bold}AGENTS (native integration)${COLORS.reset}
366
+ cc, claude-code Claude Code PreToolUse hooks
367
+ ws, windsurf Windsurf Cascade hooks
368
+ oc, opencode OpenCode permission.bash rules
369
+ cursor Cursor .cursorrules (guidance only)
370
+ aider Aider .aider.conf.yml read-only
371
+
372
+ ${COLORS.bold}AGENTS (wrapper/watchdog)${COLORS.reset}
373
+ codex Codex CLI Use 'leash watch' (OS sandbox)
374
+ copilot GitHub Copilot Use wrapper mode
375
+ <any> Any CLI tool PATH-based interception
376
+
377
+ ${COLORS.bold}EXAMPLES${COLORS.reset}
378
+ ${COLORS.dim}# Quick start - wrapper mode${COLORS.reset}
379
+ leash cc "don't delete test files"
380
+
381
+ ${COLORS.dim}# Native mode - persistent policies${COLORS.reset}
382
+ leash add "don't delete test files"
383
+ leash add "protect .env"
384
+ leash install cc
385
+ leash install windsurf
386
+
387
+ ${COLORS.dim}# Watchdog mode - catches everything${COLORS.reset}
388
+ leash watch "protect test files"
389
+
390
+ ${COLORS.dim}# Project config - team-wide policies${COLORS.reset}
391
+ leash init # Creates .leash file
392
+ leash sync cc # Compiles and installs
393
+
394
+ ${COLORS.bold}ENVIRONMENT${COLORS.reset}
395
+ GEMINI_API_KEY Required for custom restrictions (not builtins).
396
+ Free: https://aistudio.google.com/apikey
397
+
398
+ ${COLORS.bold}MORE INFO${COLORS.reset}
399
+ https://github.com/plaw-inc/veto-leash
400
+ `);
401
+ }
402
+ main().catch((err) => {
403
+ console.error(`${COLORS.error}${SYMBOLS.error} Error: ${err.message}${COLORS.reset}`);
404
+ process.exit(1);
405
+ });
406
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ export interface CloudConfig {
2
+ authenticated: boolean;
3
+ team_id?: string;
4
+ user_id?: string;
5
+ email?: string;
6
+ last_sync?: string;
7
+ }
8
+ /**
9
+ * Check if user is authenticated with Leash Cloud
10
+ */
11
+ export declare function isAuthenticated(): boolean;
12
+ /**
13
+ * Load cloud configuration
14
+ */
15
+ export declare function loadCloudConfig(): CloudConfig;
16
+ /**
17
+ * Save cloud configuration
18
+ */
19
+ export declare function saveCloudConfig(config: CloudConfig): void;
20
+ /**
21
+ * Authenticate with Leash Cloud (stub)
22
+ */
23
+ export declare function login(): Promise<boolean>;
24
+ /**
25
+ * Sync policies with Leash Cloud (stub)
26
+ */
27
+ export declare function syncPolicies(): Promise<boolean>;
28
+ /**
29
+ * Upload audit log to Leash Cloud (stub)
30
+ */
31
+ export declare function uploadAuditLog(): Promise<boolean>;
32
+ /**
33
+ * Download team policies from Leash Cloud (stub)
34
+ */
35
+ export declare function downloadTeamPolicies(): Promise<string[]>;
36
+ /**
37
+ * Check cloud status
38
+ */
39
+ export declare function printCloudStatus(): void;
40
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cloud/index.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAOzC;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,WAAW,CAU7C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,GAAG,IAAI,CAGzD;AAED;;GAEG;AACH,wBAAsB,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,CAW9C;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC,CAUrD;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAOvD;AAED;;GAEG;AACH,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,CAO9D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAqBvC"}
@@ -0,0 +1,115 @@
1
+ // src/cloud/index.ts
2
+ // Leash Cloud integration stubs
3
+ // Ready for future cloud sync, team policies, and model credits
4
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
5
+ import { join } from 'path';
6
+ import { homedir } from 'os';
7
+ import { COLORS, SYMBOLS } from '../ui/colors.js';
8
+ const CONFIG_DIR = join(homedir(), '.config', 'veto-leash');
9
+ const CLOUD_CONFIG = join(CONFIG_DIR, 'cloud.json');
10
+ // Environment variables for cloud configuration
11
+ const CLOUD_URL = process.env.LEASH_CLOUD_URL || 'https://api.leash.cloud';
12
+ const CLOUD_API_KEY = process.env.LEASH_API_KEY;
13
+ /**
14
+ * Check if user is authenticated with Leash Cloud
15
+ */
16
+ export function isAuthenticated() {
17
+ try {
18
+ const config = loadCloudConfig();
19
+ return config.authenticated && !!CLOUD_API_KEY;
20
+ }
21
+ catch {
22
+ return false;
23
+ }
24
+ }
25
+ /**
26
+ * Load cloud configuration
27
+ */
28
+ export function loadCloudConfig() {
29
+ if (!existsSync(CLOUD_CONFIG)) {
30
+ return { authenticated: false };
31
+ }
32
+ try {
33
+ return JSON.parse(readFileSync(CLOUD_CONFIG, 'utf-8'));
34
+ }
35
+ catch {
36
+ return { authenticated: false };
37
+ }
38
+ }
39
+ /**
40
+ * Save cloud configuration
41
+ */
42
+ export function saveCloudConfig(config) {
43
+ mkdirSync(CONFIG_DIR, { recursive: true });
44
+ writeFileSync(CLOUD_CONFIG, JSON.stringify(config, null, 2));
45
+ }
46
+ /**
47
+ * Authenticate with Leash Cloud (stub)
48
+ */
49
+ export async function login() {
50
+ console.log(`\n${COLORS.info}Leash Cloud${COLORS.reset}\n`);
51
+ console.log(`${COLORS.warning}${SYMBOLS.warning} Cloud integration coming soon!${COLORS.reset}\n`);
52
+ console.log(`Leash Cloud will provide:`);
53
+ console.log(` ${COLORS.dim}${SYMBOLS.bullet}${COLORS.reset} Team-wide policy sync`);
54
+ console.log(` ${COLORS.dim}${SYMBOLS.bullet}${COLORS.reset} Centralized audit logs`);
55
+ console.log(` ${COLORS.dim}${SYMBOLS.bullet}${COLORS.reset} LLM credits for compilation`);
56
+ console.log(` ${COLORS.dim}${SYMBOLS.bullet}${COLORS.reset} Policy analytics\n`);
57
+ console.log(`Join the waitlist: ${COLORS.info}https://leash.cloud${COLORS.reset}\n`);
58
+ return false;
59
+ }
60
+ /**
61
+ * Sync policies with Leash Cloud (stub)
62
+ */
63
+ export async function syncPolicies() {
64
+ if (!isAuthenticated()) {
65
+ console.log(`${COLORS.warning}${SYMBOLS.warning} Not authenticated. Run: leash login${COLORS.reset}`);
66
+ return false;
67
+ }
68
+ console.log(`${COLORS.info}Syncing policies with Leash Cloud...${COLORS.reset}`);
69
+ console.log(`${COLORS.warning}${SYMBOLS.warning} Cloud sync coming soon!${COLORS.reset}\n`);
70
+ return false;
71
+ }
72
+ /**
73
+ * Upload audit log to Leash Cloud (stub)
74
+ */
75
+ export async function uploadAuditLog() {
76
+ if (!isAuthenticated()) {
77
+ return false;
78
+ }
79
+ // Stub - will upload audit.jsonl to cloud
80
+ return false;
81
+ }
82
+ /**
83
+ * Download team policies from Leash Cloud (stub)
84
+ */
85
+ export async function downloadTeamPolicies() {
86
+ if (!isAuthenticated()) {
87
+ return [];
88
+ }
89
+ // Stub - will return array of restriction strings
90
+ return [];
91
+ }
92
+ /**
93
+ * Check cloud status
94
+ */
95
+ export function printCloudStatus() {
96
+ const config = loadCloudConfig();
97
+ console.log(`\n${COLORS.bold}Leash Cloud Status${COLORS.reset}`);
98
+ console.log('\u2550'.repeat(20) + '\n');
99
+ if (config.authenticated && config.email) {
100
+ console.log(` ${COLORS.success}${SYMBOLS.success} Authenticated${COLORS.reset}`);
101
+ console.log(` ${COLORS.dim}Email:${COLORS.reset} ${config.email}`);
102
+ if (config.team_id) {
103
+ console.log(` ${COLORS.dim}Team:${COLORS.reset} ${config.team_id}`);
104
+ }
105
+ if (config.last_sync) {
106
+ console.log(` ${COLORS.dim}Last sync:${COLORS.reset} ${config.last_sync}`);
107
+ }
108
+ }
109
+ else {
110
+ console.log(` ${COLORS.dim}Not authenticated${COLORS.reset}`);
111
+ console.log(`\n Run: ${COLORS.info}leash login${COLORS.reset}`);
112
+ }
113
+ console.log('');
114
+ }
115
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cloud/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { Policy } from '../types.js';
2
+ type PartialPolicy = Omit<Policy, 'action'>;
3
+ export declare const BUILTINS: Record<string, PartialPolicy>;
4
+ export declare function findBuiltin(phrase: string): PartialPolicy | null;
5
+ export {};
6
+ //# sourceMappingURL=builtins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../../src/compiler/builtins.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,KAAK,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAE5C,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAgHlD,CAAC;AAEF,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAgBhE"}