veto-leash 0.1.3 → 1.0.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.
- package/README.md +110 -195
- package/dist/ast/builtins.d.ts +28 -0
- package/dist/ast/builtins.d.ts.map +1 -0
- package/dist/ast/builtins.js +361 -0
- package/dist/ast/builtins.js.map +1 -0
- package/dist/ast/checker.d.ts +17 -0
- package/dist/ast/checker.d.ts.map +1 -0
- package/dist/ast/checker.js +97 -0
- package/dist/ast/checker.js.map +1 -0
- package/dist/ast/index.d.ts +5 -0
- package/dist/ast/index.d.ts.map +1 -0
- package/dist/ast/index.js +7 -0
- package/dist/ast/index.js.map +1 -0
- package/dist/ast/parser.d.ts +55 -0
- package/dist/ast/parser.d.ts.map +1 -0
- package/dist/ast/parser.js +210 -0
- package/dist/ast/parser.js.map +1 -0
- package/dist/ast/query.d.ts +48 -0
- package/dist/ast/query.d.ts.map +1 -0
- package/dist/ast/query.js +102 -0
- package/dist/ast/query.js.map +1 -0
- package/dist/ast/validate-cli.d.ts +21 -0
- package/dist/ast/validate-cli.d.ts.map +1 -0
- package/dist/ast/validate-cli.js +73 -0
- package/dist/ast/validate-cli.js.map +1 -0
- package/dist/cli.js +105 -21
- package/dist/cli.js.map +1 -1
- package/dist/compiler/builtins.d.ts.map +1 -1
- package/dist/compiler/builtins.js +721 -4
- package/dist/compiler/builtins.js.map +1 -1
- package/dist/compiler/commands.d.ts +40 -0
- package/dist/compiler/commands.d.ts.map +1 -0
- package/dist/compiler/commands.js +311 -0
- package/dist/compiler/commands.js.map +1 -0
- package/dist/compiler/content.d.ts +160 -0
- package/dist/compiler/content.d.ts.map +1 -0
- package/dist/compiler/content.js +461 -0
- package/dist/compiler/content.js.map +1 -0
- package/dist/compiler/index.d.ts.map +1 -1
- package/dist/compiler/index.js +34 -7
- package/dist/compiler/index.js.map +1 -1
- package/dist/compiler/llm.d.ts.map +1 -1
- package/dist/compiler/llm.js +96 -9
- package/dist/compiler/llm.js.map +1 -1
- package/dist/compiler/prompt.d.ts +1 -1
- package/dist/compiler/prompt.d.ts.map +1 -1
- package/dist/compiler/prompt.js +247 -15
- package/dist/compiler/prompt.js.map +1 -1
- package/dist/config/leash-parser.d.ts +29 -0
- package/dist/config/leash-parser.d.ts.map +1 -0
- package/dist/config/leash-parser.js +70 -0
- package/dist/config/leash-parser.js.map +1 -0
- package/dist/config/loader.d.ts +2 -1
- package/dist/config/loader.d.ts.map +1 -1
- package/dist/config/loader.js +18 -8
- package/dist/config/loader.js.map +1 -1
- package/dist/config/schema.d.ts +8 -0
- package/dist/config/schema.d.ts.map +1 -1
- package/dist/config/schema.js +19 -0
- package/dist/config/schema.js.map +1 -1
- package/dist/config/watcher.d.ts +18 -0
- package/dist/config/watcher.d.ts.map +1 -0
- package/dist/config/watcher.js +102 -0
- package/dist/config/watcher.js.map +1 -0
- package/dist/matcher.d.ts +18 -0
- package/dist/matcher.d.ts.map +1 -1
- package/dist/matcher.js +43 -0
- package/dist/matcher.js.map +1 -1
- package/dist/native/claude-code.d.ts.map +1 -1
- package/dist/native/claude-code.js +294 -50
- package/dist/native/claude-code.js.map +1 -1
- package/dist/native/cursor.d.ts +14 -1
- package/dist/native/cursor.d.ts.map +1 -1
- package/dist/native/cursor.js +340 -34
- package/dist/native/cursor.js.map +1 -1
- package/dist/native/index.d.ts +5 -0
- package/dist/native/index.d.ts.map +1 -1
- package/dist/native/index.js +56 -10
- package/dist/native/index.js.map +1 -1
- package/dist/native/opencode.d.ts.map +1 -1
- package/dist/native/opencode.js +15 -3
- package/dist/native/opencode.js.map +1 -1
- package/dist/native/validator.d.ts +15 -0
- package/dist/native/validator.d.ts.map +1 -0
- package/dist/native/validator.js +343 -0
- package/dist/native/validator.js.map +1 -0
- package/dist/types.d.ts +114 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/wrapper/daemon.d.ts.map +1 -1
- package/dist/wrapper/daemon.js +31 -2
- package/dist/wrapper/daemon.js.map +1 -1
- package/languages/tree-sitter-javascript.wasm +0 -0
- package/languages/tree-sitter-tsx.wasm +0 -0
- package/languages/tree-sitter-typescript.wasm +0 -0
- package/package.json +5 -2
package/dist/config/loader.js
CHANGED
|
@@ -3,9 +3,10 @@
|
|
|
3
3
|
import { existsSync, readFileSync, writeFileSync } from 'fs';
|
|
4
4
|
import { join } from 'path';
|
|
5
5
|
import { parse as parseYaml } from 'yaml';
|
|
6
|
-
import { validateConfig,
|
|
6
|
+
import { validateConfig, generateSimpleLeash, DEFAULT_SETTINGS, DEFAULT_SIMPLE_POLICIES, } from './schema.js';
|
|
7
7
|
import { compile } from '../compiler/index.js';
|
|
8
8
|
import { COLORS, SYMBOLS, createSpinner } from '../ui/colors.js';
|
|
9
|
+
import { parseLeashFile, isSimpleLeashFormat, policiesToConfig } from './leash-parser.js';
|
|
9
10
|
const LEASH_FILE = '.leash';
|
|
10
11
|
const LEASH_YAML = '.leash.yaml';
|
|
11
12
|
const LEASH_YML = '.leash.yml';
|
|
@@ -25,6 +26,7 @@ export function findLeashConfig(dir = process.cwd()) {
|
|
|
25
26
|
}
|
|
26
27
|
/**
|
|
27
28
|
* Load and parse .leash config
|
|
29
|
+
* Supports both simple plain-text format and YAML format.
|
|
28
30
|
*/
|
|
29
31
|
export function loadLeashConfig(path) {
|
|
30
32
|
if (!existsSync(path)) {
|
|
@@ -32,13 +34,22 @@ export function loadLeashConfig(path) {
|
|
|
32
34
|
}
|
|
33
35
|
try {
|
|
34
36
|
const content = readFileSync(path, 'utf-8');
|
|
35
|
-
|
|
37
|
+
// Handle JSON explicitly
|
|
36
38
|
if (path.endsWith('.json')) {
|
|
37
|
-
config = JSON.parse(content);
|
|
39
|
+
const config = JSON.parse(content);
|
|
40
|
+
if (!validateConfig(config)) {
|
|
41
|
+
console.error(`${COLORS.error}${SYMBOLS.error} Invalid .leash config${COLORS.reset}`);
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
return config;
|
|
38
45
|
}
|
|
39
|
-
|
|
40
|
-
|
|
46
|
+
// Check for simple plain-text format (one rule per line)
|
|
47
|
+
if (isSimpleLeashFormat(content)) {
|
|
48
|
+
const policies = parseLeashFile(content);
|
|
49
|
+
return policiesToConfig(policies);
|
|
41
50
|
}
|
|
51
|
+
// Fall back to YAML parsing
|
|
52
|
+
const config = parseYaml(content);
|
|
42
53
|
if (!validateConfig(config)) {
|
|
43
54
|
console.error(`${COLORS.error}${SYMBOLS.error} Invalid .leash config${COLORS.reset}`);
|
|
44
55
|
return null;
|
|
@@ -77,7 +88,7 @@ export async function compileLeashConfig(config) {
|
|
|
77
88
|
return compiled;
|
|
78
89
|
}
|
|
79
90
|
/**
|
|
80
|
-
* Create a new .leash config file
|
|
91
|
+
* Create a new .leash config file (simple plain-text format)
|
|
81
92
|
*/
|
|
82
93
|
export function createLeashConfig(dir = process.cwd()) {
|
|
83
94
|
const path = join(dir, LEASH_FILE);
|
|
@@ -85,8 +96,7 @@ export function createLeashConfig(dir = process.cwd()) {
|
|
|
85
96
|
console.log(`${COLORS.warning}${SYMBOLS.warning} .leash already exists${COLORS.reset}`);
|
|
86
97
|
return path;
|
|
87
98
|
}
|
|
88
|
-
const
|
|
89
|
-
const content = generateLeashYaml(config);
|
|
99
|
+
const content = generateSimpleLeash(DEFAULT_SIMPLE_POLICIES);
|
|
90
100
|
writeFileSync(path, content);
|
|
91
101
|
console.log(`${COLORS.success}${SYMBOLS.success} Created ${path}${COLORS.reset}`);
|
|
92
102
|
return path;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA,uBAAuB;AACvB,4CAA4C;AAE5C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AAC7D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EACL,cAAc,EACd,
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
|
package/dist/config/schema.d.ts
CHANGED
|
@@ -39,4 +39,12 @@ export declare function generateDefaultConfig(): LeashConfig;
|
|
|
39
39
|
* Generate YAML content for a .leash file
|
|
40
40
|
*/
|
|
41
41
|
export declare function generateLeashYaml(config: LeashConfig): string;
|
|
42
|
+
/**
|
|
43
|
+
* Default policies for simple .leash format
|
|
44
|
+
*/
|
|
45
|
+
export declare const DEFAULT_SIMPLE_POLICIES: string[];
|
|
46
|
+
/**
|
|
47
|
+
* Generate simple plain-text .leash content
|
|
48
|
+
*/
|
|
49
|
+
export declare function generateSimpleLeash(policies: string[]): string;
|
|
42
50
|
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,CAAC,CAAC;IACX,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,CAAC,CAAC;IACX,QAAQ,EAAE,KAAK,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAC1B;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,aAI9B,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,WAAW,CA+BrE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,WAAW,CAYnD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAqC7D"}
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,CAAC,CAAC;IACX,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,CAAC,CAAC;IACX,QAAQ,EAAE,KAAK,CAAC;QACd,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH,QAAQ,EAAE,aAAa,CAAC;IACxB,KAAK,CAAC,EAAE,gBAAgB,CAAC;CAC1B;AAED;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,aAI9B,CAAC;AAEF;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,IAAI,WAAW,CA+BrE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,WAAW,CAYnD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAqC7D;AAED;;GAEG;AACH,eAAO,MAAM,uBAAuB,UAGnC,CAAC;AAEF;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,CAQ9D"}
|
package/dist/config/schema.js
CHANGED
|
@@ -90,4 +90,23 @@ export function generateLeashYaml(config) {
|
|
|
90
90
|
lines.push('');
|
|
91
91
|
return lines.join('\n');
|
|
92
92
|
}
|
|
93
|
+
/**
|
|
94
|
+
* Default policies for simple .leash format
|
|
95
|
+
*/
|
|
96
|
+
export const DEFAULT_SIMPLE_POLICIES = [
|
|
97
|
+
'no any types',
|
|
98
|
+
'no console.log',
|
|
99
|
+
];
|
|
100
|
+
/**
|
|
101
|
+
* Generate simple plain-text .leash content
|
|
102
|
+
*/
|
|
103
|
+
export function generateSimpleLeash(policies) {
|
|
104
|
+
return [
|
|
105
|
+
'# .leash - Policies for AI coding agents',
|
|
106
|
+
'# One policy per line. Lines starting with # are comments.',
|
|
107
|
+
'',
|
|
108
|
+
...policies,
|
|
109
|
+
'',
|
|
110
|
+
].join('\n');
|
|
111
|
+
}
|
|
93
112
|
//# sourceMappingURL=schema.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/config/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Start watching the .leash file for changes.
|
|
3
|
+
* Automatically recompiles on every save.
|
|
4
|
+
*/
|
|
5
|
+
export declare function startLeashWatcher(dir?: string): Promise<boolean>;
|
|
6
|
+
/**
|
|
7
|
+
* Stop watching the .leash file.
|
|
8
|
+
*/
|
|
9
|
+
export declare function stopLeashWatcher(): Promise<void>;
|
|
10
|
+
/**
|
|
11
|
+
* Check if compiled cache exists and is up-to-date.
|
|
12
|
+
*/
|
|
13
|
+
export declare function hasCompiledCache(dir?: string): boolean;
|
|
14
|
+
/**
|
|
15
|
+
* Force recompile the .leash file.
|
|
16
|
+
*/
|
|
17
|
+
export declare function forceRecompile(dir?: string): Promise<boolean>;
|
|
18
|
+
//# sourceMappingURL=watcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../../src/config/watcher.ts"],"names":[],"mappings":"AAsDA;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,OAAO,CAAC,CA4BrF;AAED;;GAEG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAKtD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAIrE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,GAAG,GAAE,MAAsB,GAAG,OAAO,CAAC,OAAO,CAAC,CAIlF"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
// src/config/watcher.ts
|
|
2
|
+
// Background file watcher for automatic .leash recompilation
|
|
3
|
+
import { watch } from 'chokidar';
|
|
4
|
+
import { writeFileSync, existsSync } from 'fs';
|
|
5
|
+
import { join, dirname } from 'path';
|
|
6
|
+
import { findLeashConfig, loadLeashConfig, compileLeashConfig } from './loader.js';
|
|
7
|
+
import { COLORS, SYMBOLS } from '../ui/colors.js';
|
|
8
|
+
let watcher = null;
|
|
9
|
+
let isCompiling = false;
|
|
10
|
+
/**
|
|
11
|
+
* Compiled cache file path (sibling to .leash)
|
|
12
|
+
*/
|
|
13
|
+
function getCompiledPath(leashPath) {
|
|
14
|
+
return join(dirname(leashPath), '.leash.compiled.json');
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Compile the .leash file and write to cache.
|
|
18
|
+
* Called on file change and on initial startup.
|
|
19
|
+
*/
|
|
20
|
+
async function recompile(leashPath) {
|
|
21
|
+
if (isCompiling)
|
|
22
|
+
return false;
|
|
23
|
+
isCompiling = true;
|
|
24
|
+
try {
|
|
25
|
+
const config = loadLeashConfig(leashPath);
|
|
26
|
+
if (!config) {
|
|
27
|
+
isCompiling = false;
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
if (config.policies.length === 0) {
|
|
31
|
+
console.log(` ${COLORS.dim}No policies to compile${COLORS.reset}`);
|
|
32
|
+
isCompiling = false;
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
const compiled = await compileLeashConfig(config);
|
|
36
|
+
const outPath = getCompiledPath(leashPath);
|
|
37
|
+
writeFileSync(outPath, JSON.stringify(compiled, null, 2));
|
|
38
|
+
console.log(` ${COLORS.success}${SYMBOLS.success} Compiled ${compiled.policies.length} policies${COLORS.reset}`);
|
|
39
|
+
isCompiling = false;
|
|
40
|
+
return true;
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
console.error(` ${COLORS.error}${SYMBOLS.error} Compilation failed: ${err.message}${COLORS.reset}`);
|
|
44
|
+
isCompiling = false;
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Start watching the .leash file for changes.
|
|
50
|
+
* Automatically recompiles on every save.
|
|
51
|
+
*/
|
|
52
|
+
export async function startLeashWatcher(dir = process.cwd()) {
|
|
53
|
+
const leashPath = findLeashConfig(dir);
|
|
54
|
+
if (!leashPath) {
|
|
55
|
+
console.log(`${COLORS.warning}${SYMBOLS.warning} No .leash file found${COLORS.reset}`);
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
console.log(`\n${COLORS.info}Watching ${leashPath} for changes...${COLORS.reset}`);
|
|
59
|
+
// Initial compile
|
|
60
|
+
await recompile(leashPath);
|
|
61
|
+
// Watch for changes
|
|
62
|
+
watcher = watch(leashPath, {
|
|
63
|
+
persistent: true,
|
|
64
|
+
ignoreInitial: true,
|
|
65
|
+
});
|
|
66
|
+
watcher.on('change', async () => {
|
|
67
|
+
console.log(`\n${COLORS.dim}[${new Date().toLocaleTimeString()}] .leash changed${COLORS.reset}`);
|
|
68
|
+
await recompile(leashPath);
|
|
69
|
+
});
|
|
70
|
+
watcher.on('unlink', () => {
|
|
71
|
+
console.log(`\n${COLORS.warning}${SYMBOLS.warning} .leash file deleted${COLORS.reset}`);
|
|
72
|
+
});
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Stop watching the .leash file.
|
|
77
|
+
*/
|
|
78
|
+
export async function stopLeashWatcher() {
|
|
79
|
+
if (watcher) {
|
|
80
|
+
await watcher.close();
|
|
81
|
+
watcher = null;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Check if compiled cache exists and is up-to-date.
|
|
86
|
+
*/
|
|
87
|
+
export function hasCompiledCache(dir = process.cwd()) {
|
|
88
|
+
const leashPath = findLeashConfig(dir);
|
|
89
|
+
if (!leashPath)
|
|
90
|
+
return false;
|
|
91
|
+
return existsSync(getCompiledPath(leashPath));
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Force recompile the .leash file.
|
|
95
|
+
*/
|
|
96
|
+
export async function forceRecompile(dir = process.cwd()) {
|
|
97
|
+
const leashPath = findLeashConfig(dir);
|
|
98
|
+
if (!leashPath)
|
|
99
|
+
return false;
|
|
100
|
+
return recompile(leashPath);
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=watcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"watcher.js","sourceRoot":"","sources":["../../src/config/watcher.ts"],"names":[],"mappings":"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"}
|
package/dist/matcher.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { Policy } from './types.js';
|
|
2
|
+
export { checkCommand, extractFileTargets } from './compiler/commands.js';
|
|
2
3
|
/**
|
|
3
4
|
* Normalize a path for cross-platform pattern matching.
|
|
4
5
|
* - Converts backslashes to forward slashes (Windows paths)
|
|
@@ -19,4 +20,21 @@ export declare function getProtectedFiles(files: string[], policy: Policy): stri
|
|
|
19
20
|
* Get all files in a list that would be excluded (allowed) by the policy.
|
|
20
21
|
*/
|
|
21
22
|
export declare function getExcludedFiles(files: string[], policy: Policy): string[];
|
|
23
|
+
/**
|
|
24
|
+
* Full policy check for a bash command.
|
|
25
|
+
* Checks both file targets (for delete/modify actions) and command rules.
|
|
26
|
+
*/
|
|
27
|
+
export declare function checkBashCommand(command: string, policy: Policy): {
|
|
28
|
+
allowed: boolean;
|
|
29
|
+
reason?: string;
|
|
30
|
+
suggest?: string;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Check if a policy has any command rules.
|
|
34
|
+
*/
|
|
35
|
+
export declare function hasCommandRules(policy: Policy): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Check if a policy is command-only (no file patterns).
|
|
38
|
+
*/
|
|
39
|
+
export declare function isCommandOnlyPolicy(policy: Policy): boolean;
|
|
22
40
|
//# sourceMappingURL=matcher.d.ts.map
|
package/dist/matcher.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matcher.d.ts","sourceRoot":"","sources":["../src/matcher.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"matcher.d.ts","sourceRoot":"","sources":["../src/matcher.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAsB,MAAM,YAAY,CAAC;AAM7D,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAQ1E;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CA2B/C;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAenE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAE3E;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAS1E;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAyBzD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE3D"}
|
package/dist/matcher.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
// src/matcher.ts
|
|
2
2
|
import micromatch from 'micromatch';
|
|
3
|
+
import { checkCommand, extractFileTargets } from './compiler/commands.js';
|
|
3
4
|
const { isMatch } = micromatch;
|
|
5
|
+
// Re-export command functions for convenience
|
|
6
|
+
export { checkCommand, extractFileTargets } from './compiler/commands.js';
|
|
4
7
|
const MATCH_OPTIONS = {
|
|
5
8
|
basename: true, // *.test.ts matches src/foo.test.ts
|
|
6
9
|
dot: true, // Match dotfiles
|
|
@@ -66,4 +69,44 @@ export function getExcludedFiles(files, policy) {
|
|
|
66
69
|
return policy.exclude.some((p) => isMatch(f, p, MATCH_OPTIONS));
|
|
67
70
|
});
|
|
68
71
|
}
|
|
72
|
+
/**
|
|
73
|
+
* Full policy check for a bash command.
|
|
74
|
+
* Checks both file targets (for delete/modify actions) and command rules.
|
|
75
|
+
*/
|
|
76
|
+
export function checkBashCommand(command, policy) {
|
|
77
|
+
// First check command rules (fast path)
|
|
78
|
+
const cmdResult = checkCommand(command, policy);
|
|
79
|
+
if (cmdResult.blocked && cmdResult.rule) {
|
|
80
|
+
return {
|
|
81
|
+
allowed: false,
|
|
82
|
+
reason: cmdResult.rule.reason,
|
|
83
|
+
suggest: cmdResult.rule.suggest,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
// Then check file targets for file-based policies
|
|
87
|
+
if (policy.include.length > 0) {
|
|
88
|
+
const targets = extractFileTargets(command, policy.action);
|
|
89
|
+
for (const target of targets) {
|
|
90
|
+
if (isProtected(target, policy)) {
|
|
91
|
+
return {
|
|
92
|
+
allowed: false,
|
|
93
|
+
reason: policy.description,
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
return { allowed: true };
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Check if a policy has any command rules.
|
|
102
|
+
*/
|
|
103
|
+
export function hasCommandRules(policy) {
|
|
104
|
+
return Array.isArray(policy.commandRules) && policy.commandRules.length > 0;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Check if a policy is command-only (no file patterns).
|
|
108
|
+
*/
|
|
109
|
+
export function isCommandOnlyPolicy(policy) {
|
|
110
|
+
return policy.include.length === 0 && hasCommandRules(policy);
|
|
111
|
+
}
|
|
69
112
|
//# sourceMappingURL=matcher.js.map
|
package/dist/matcher.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matcher.js","sourceRoot":"","sources":["../src/matcher.ts"],"names":[],"mappings":"AAAA,iBAAiB;AAEjB,OAAO,UAAU,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"matcher.js","sourceRoot":"","sources":["../src/matcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../src/native/claude-code.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../src/native/claude-code.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAqC1C;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,IAAI,CAAC,CA0G3D;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOrF;AAED;;GAEG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,IAAI,CAAC,CAwB7D"}
|