opencode-varlock 0.0.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 +21 -0
- package/README.md +352 -0
- package/assets/permissions.json +156 -0
- package/assets/varlock.config.json +53 -0
- package/assets/varlock.schema.json +105 -0
- package/dist/config.d.ts +40 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +105 -0
- package/dist/config.js.map +1 -0
- package/dist/guard.d.ts +15 -0
- package/dist/guard.d.ts.map +1 -0
- package/dist/guard.js +163 -0
- package/dist/guard.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/plugin.d.ts +6 -0
- package/dist/plugin.d.ts.map +1 -0
- package/dist/plugin.js +56 -0
- package/dist/plugin.js.map +1 -0
- package/dist/tools.d.ts +39 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +216 -0
- package/dist/tools.js.map +1 -0
- package/package.json +78 -0
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration system for opencode-varlock.
|
|
3
|
+
*
|
|
4
|
+
* Resolution order (last wins):
|
|
5
|
+
* 1. Built-in defaults
|
|
6
|
+
* 2. varlock.config.json in project root
|
|
7
|
+
* 3. .opencode/varlock.config.json
|
|
8
|
+
* 4. Programmatic options passed to createVarlockPlugin()
|
|
9
|
+
*/
|
|
10
|
+
export type GuardConfig = {
|
|
11
|
+
enabled: boolean;
|
|
12
|
+
sensitivePatterns: string[];
|
|
13
|
+
sensitiveGlobs: string[];
|
|
14
|
+
bashDenyPatterns: string[];
|
|
15
|
+
blockedReadTools: string[];
|
|
16
|
+
blockedWriteTools: string[];
|
|
17
|
+
};
|
|
18
|
+
export type EnvConfig = {
|
|
19
|
+
enabled: boolean;
|
|
20
|
+
allowedRoot: string;
|
|
21
|
+
};
|
|
22
|
+
export type VarlockConfig = {
|
|
23
|
+
enabled: boolean;
|
|
24
|
+
autoDetect: boolean;
|
|
25
|
+
command: string;
|
|
26
|
+
namespace: string;
|
|
27
|
+
};
|
|
28
|
+
export type PluginConfig = {
|
|
29
|
+
guard: GuardConfig;
|
|
30
|
+
env: EnvConfig;
|
|
31
|
+
varlock: VarlockConfig;
|
|
32
|
+
};
|
|
33
|
+
export declare const DEFAULT_CONFIG: PluginConfig;
|
|
34
|
+
export declare function loadConfig(cwd: string, overrides?: DeepPartial<PluginConfig>): PluginConfig;
|
|
35
|
+
type DeepPartial<T> = {
|
|
36
|
+
[K in keyof T]?: T[K] extends object ? DeepPartial<T[K]> : T[K];
|
|
37
|
+
};
|
|
38
|
+
export declare function deepMerge<T extends Record<string, any>>(target: T, source: DeepPartial<T>): T;
|
|
39
|
+
export type { DeepPartial };
|
|
40
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,OAAO,CAAA;IAChB,iBAAiB,EAAE,MAAM,EAAE,CAAA;IAC3B,cAAc,EAAE,MAAM,EAAE,CAAA;IACxB,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,iBAAiB,EAAE,MAAM,EAAE,CAAA;CAC5B,CAAA;AAED,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,OAAO,CAAA;IACnB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,KAAK,EAAE,WAAW,CAAA;IAClB,GAAG,EAAE,SAAS,CAAA;IACd,OAAO,EAAE,aAAa,CAAA;CACvB,CAAA;AAED,eAAO,MAAM,cAAc,EAAE,YAqC5B,CAAA;AAOD,wBAAgB,UAAU,CACxB,GAAG,EAAE,MAAM,EACX,SAAS,GAAE,WAAW,CAAC,YAAY,CAAM,GACxC,YAAY,CA8Bd;AAED,KAAK,WAAW,CAAC,CAAC,IAAI;KACnB,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;CAChE,CAAA;AAED,wBAAgB,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACrD,MAAM,EAAE,CAAC,EACT,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,GACrB,CAAC,CAyBH;AAED,YAAY,EAAE,WAAW,EAAE,CAAA"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration system for opencode-varlock.
|
|
3
|
+
*
|
|
4
|
+
* Resolution order (last wins):
|
|
5
|
+
* 1. Built-in defaults
|
|
6
|
+
* 2. varlock.config.json in project root
|
|
7
|
+
* 3. .opencode/varlock.config.json
|
|
8
|
+
* 4. Programmatic options passed to createVarlockPlugin()
|
|
9
|
+
*/
|
|
10
|
+
import { existsSync, readFileSync } from "fs";
|
|
11
|
+
import { resolve } from "path";
|
|
12
|
+
export const DEFAULT_CONFIG = {
|
|
13
|
+
guard: {
|
|
14
|
+
enabled: true,
|
|
15
|
+
sensitivePatterns: [
|
|
16
|
+
".env",
|
|
17
|
+
".secret",
|
|
18
|
+
".pem",
|
|
19
|
+
".key",
|
|
20
|
+
"credentials",
|
|
21
|
+
".pgpass",
|
|
22
|
+
],
|
|
23
|
+
sensitiveGlobs: [
|
|
24
|
+
"**/.env",
|
|
25
|
+
"**/.env.*",
|
|
26
|
+
"**/.env.local",
|
|
27
|
+
"**/.env.production",
|
|
28
|
+
"**/*.pem",
|
|
29
|
+
"**/*.key",
|
|
30
|
+
"**/credentials",
|
|
31
|
+
"**/credentials.*",
|
|
32
|
+
"**/.pgpass",
|
|
33
|
+
"secrets/**",
|
|
34
|
+
],
|
|
35
|
+
bashDenyPatterns: [],
|
|
36
|
+
blockedReadTools: ["read", "grep", "glob", "view"],
|
|
37
|
+
blockedWriteTools: ["write", "edit"],
|
|
38
|
+
},
|
|
39
|
+
env: {
|
|
40
|
+
enabled: true,
|
|
41
|
+
allowedRoot: ".",
|
|
42
|
+
},
|
|
43
|
+
varlock: {
|
|
44
|
+
enabled: false,
|
|
45
|
+
autoDetect: true,
|
|
46
|
+
command: "varlock",
|
|
47
|
+
namespace: "app",
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
const CONFIG_FILENAMES = [
|
|
51
|
+
"varlock.config.json",
|
|
52
|
+
".opencode/varlock.config.json",
|
|
53
|
+
];
|
|
54
|
+
export function loadConfig(cwd, overrides = {}) {
|
|
55
|
+
let merged = structuredClone(DEFAULT_CONFIG);
|
|
56
|
+
for (const filename of CONFIG_FILENAMES) {
|
|
57
|
+
const filepath = resolve(cwd, filename);
|
|
58
|
+
if (existsSync(filepath)) {
|
|
59
|
+
try {
|
|
60
|
+
const raw = readFileSync(filepath, "utf-8");
|
|
61
|
+
const parsed = JSON.parse(raw);
|
|
62
|
+
delete parsed.$schema;
|
|
63
|
+
delete parsed.$comment;
|
|
64
|
+
merged = deepMerge(merged, parsed);
|
|
65
|
+
console.log(`[varlock] Loaded config from ${filepath}`);
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
console.warn(`[varlock] Failed to parse ${filepath}: ${err.message}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
merged = deepMerge(merged, overrides);
|
|
73
|
+
if (merged.env.allowedRoot && !resolve(merged.env.allowedRoot).startsWith("/")) {
|
|
74
|
+
merged.env.allowedRoot = resolve(cwd, merged.env.allowedRoot);
|
|
75
|
+
}
|
|
76
|
+
else if (merged.env.allowedRoot) {
|
|
77
|
+
merged.env.allowedRoot = resolve(merged.env.allowedRoot);
|
|
78
|
+
}
|
|
79
|
+
return merged;
|
|
80
|
+
}
|
|
81
|
+
export function deepMerge(target, source) {
|
|
82
|
+
const result = { ...target };
|
|
83
|
+
for (const key of Object.keys(source)) {
|
|
84
|
+
const srcVal = source[key];
|
|
85
|
+
if (srcVal === undefined || srcVal === null)
|
|
86
|
+
continue;
|
|
87
|
+
if (Array.isArray(srcVal)) {
|
|
88
|
+
;
|
|
89
|
+
result[key] = [...srcVal];
|
|
90
|
+
}
|
|
91
|
+
else if (typeof srcVal === "object" &&
|
|
92
|
+
!Array.isArray(srcVal) &&
|
|
93
|
+
typeof result[key] === "object" &&
|
|
94
|
+
!Array.isArray(result[key])) {
|
|
95
|
+
;
|
|
96
|
+
result[key] = deepMerge(result[key], srcVal);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
;
|
|
100
|
+
result[key] = srcVal;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
return result;
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AA6B9B,MAAM,CAAC,MAAM,cAAc,GAAiB;IAC1C,KAAK,EAAE;QACL,OAAO,EAAE,IAAI;QACb,iBAAiB,EAAE;YACjB,MAAM;YACN,SAAS;YACT,MAAM;YACN,MAAM;YACN,aAAa;YACb,SAAS;SACV;QACD,cAAc,EAAE;YACd,SAAS;YACT,WAAW;YACX,eAAe;YACf,oBAAoB;YACpB,UAAU;YACV,UAAU;YACV,gBAAgB;YAChB,kBAAkB;YAClB,YAAY;YACZ,YAAY;SACb;QACD,gBAAgB,EAAE,EAAE;QACpB,gBAAgB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;QAClD,iBAAiB,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC;KACrC;IACD,GAAG,EAAE;QACH,OAAO,EAAE,IAAI;QACb,WAAW,EAAE,GAAG;KACjB;IACD,OAAO,EAAE;QACP,OAAO,EAAE,KAAK;QACd,UAAU,EAAE,IAAI;QAChB,OAAO,EAAE,SAAS;QAClB,SAAS,EAAE,KAAK;KACjB;CACF,CAAA;AAED,MAAM,gBAAgB,GAAG;IACvB,qBAAqB;IACrB,+BAA+B;CAChC,CAAA;AAED,MAAM,UAAU,UAAU,CACxB,GAAW,EACX,YAAuC,EAAE;IAEzC,IAAI,MAAM,GAAG,eAAe,CAAC,cAAc,CAAC,CAAA;IAE5C,KAAK,MAAM,QAAQ,IAAI,gBAAgB,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;QACvC,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;gBAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;gBAE9B,OAAO,MAAM,CAAC,OAAO,CAAA;gBACrB,OAAO,MAAM,CAAC,QAAQ,CAAA;gBAEtB,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;gBAClC,OAAO,CAAC,GAAG,CAAC,gCAAgC,QAAQ,EAAE,CAAC,CAAA;YACzD,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,OAAO,CAAC,IAAI,CAAC,6BAA6B,QAAQ,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAA;YACvE,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,SAAgB,CAAC,CAAA;IAE5C,IAAI,MAAM,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC/E,MAAM,CAAC,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IAC/D,CAAC;SAAM,IAAI,MAAM,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IAC1D,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAMD,MAAM,UAAU,SAAS,CACvB,MAAS,EACT,MAAsB;IAEtB,MAAM,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,CAAA;IAE5B,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAmB,EAAE,CAAC;QACxD,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;QAC1B,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI;YAAE,SAAQ;QAErD,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,CAAC;YAAC,MAAc,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAA;QACrC,CAAC;aAAM,IACL,OAAO,MAAM,KAAK,QAAQ;YAC1B,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YACtB,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ;YAC/B,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,EAC3B,CAAC;YACD,CAAC;YAAC,MAAc,CAAC,GAAG,CAAC,GAAG,SAAS,CAC/B,MAAM,CAAC,GAAG,CAAwB,EAClC,MAA6B,CAC9B,CAAA;QACH,CAAC;aAAM,CAAC;YACN,CAAC;YAAC,MAAc,CAAC,GAAG,CAAC,GAAG,MAAM,CAAA;QAChC,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC"}
|
package/dist/guard.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EnvGuard - tool.execute.before hook that prevents agents from
|
|
3
|
+
* reading sensitive files or running commands that expose secrets.
|
|
4
|
+
*/
|
|
5
|
+
import type { GuardConfig } from "./config.js";
|
|
6
|
+
export type { GuardConfig } from "./config.js";
|
|
7
|
+
type ToolInput = {
|
|
8
|
+
tool: string;
|
|
9
|
+
};
|
|
10
|
+
type ToolOutput = {
|
|
11
|
+
args: Record<string, any>;
|
|
12
|
+
};
|
|
13
|
+
export declare function createEnvGuard(config: GuardConfig): (input: ToolInput, output: ToolOutput) => Promise<void>;
|
|
14
|
+
export declare function globToRegex(glob: string): RegExp;
|
|
15
|
+
//# sourceMappingURL=guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guard.d.ts","sourceRoot":"","sources":["../src/guard.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAE9C,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAsC9C,KAAK,SAAS,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AACjC,KAAK,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;CAAE,CAAA;AAG/C,wBAAgB,cAAc,CAC5B,MAAM,EAAE,WAAW,GAClB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,IAAI,CAAC,CA8EzD;AAsBD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAuChD"}
|
package/dist/guard.js
ADDED
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EnvGuard - tool.execute.before hook that prevents agents from
|
|
3
|
+
* reading sensitive files or running commands that expose secrets.
|
|
4
|
+
*/
|
|
5
|
+
const BUILTIN_BASH_DENY = [
|
|
6
|
+
"cat .env",
|
|
7
|
+
"less .env",
|
|
8
|
+
"more .env",
|
|
9
|
+
"head .env",
|
|
10
|
+
"tail .env",
|
|
11
|
+
"bat .env",
|
|
12
|
+
"nano .env",
|
|
13
|
+
"vim .env",
|
|
14
|
+
"vi .env",
|
|
15
|
+
"code .env",
|
|
16
|
+
"printenv",
|
|
17
|
+
"echo $",
|
|
18
|
+
'echo "$',
|
|
19
|
+
"printf '%s' $",
|
|
20
|
+
"env |",
|
|
21
|
+
"env\n",
|
|
22
|
+
"export -p",
|
|
23
|
+
"declare -x",
|
|
24
|
+
"process.env",
|
|
25
|
+
"os.environ",
|
|
26
|
+
"dotenv",
|
|
27
|
+
"source .env",
|
|
28
|
+
". .env",
|
|
29
|
+
"set -a",
|
|
30
|
+
"grep .env",
|
|
31
|
+
"rg .env",
|
|
32
|
+
"ag .env",
|
|
33
|
+
"ack .env",
|
|
34
|
+
"find . -name .env",
|
|
35
|
+
"find . -name '*.env'",
|
|
36
|
+
'find . -name "*.env"',
|
|
37
|
+
"curl.*env",
|
|
38
|
+
"wget.*env",
|
|
39
|
+
];
|
|
40
|
+
export function createEnvGuard(config) {
|
|
41
|
+
const { sensitivePatterns, sensitiveGlobs, bashDenyPatterns, blockedReadTools, blockedWriteTools, } = config;
|
|
42
|
+
const bashDeny = [...BUILTIN_BASH_DENY, ...bashDenyPatterns];
|
|
43
|
+
const compiledGlobs = sensitiveGlobs.map((g) => ({
|
|
44
|
+
source: g,
|
|
45
|
+
regex: globToRegex(g),
|
|
46
|
+
}));
|
|
47
|
+
return async (input, output) => {
|
|
48
|
+
const args = output.args;
|
|
49
|
+
if (blockedReadTools.includes(input.tool)) {
|
|
50
|
+
const target = args.filePath ?? args.path ?? args.pattern ?? args.file ?? "";
|
|
51
|
+
if (target && isSensitive(target, sensitivePatterns, compiledGlobs)) {
|
|
52
|
+
throw new Error(`[varlock] Blocked: cannot directly read "${target}". ` +
|
|
53
|
+
`Use the load_env or load_secrets tool instead.`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (blockedWriteTools.includes(input.tool)) {
|
|
57
|
+
const target = args.filePath ?? args.path ?? args.file ?? "";
|
|
58
|
+
if (target && isSensitive(target, sensitivePatterns, compiledGlobs)) {
|
|
59
|
+
throw new Error(`[varlock] Blocked: cannot write to "${target}". ` +
|
|
60
|
+
`Secret files are managed outside the agent's scope.`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (input.tool === "bash") {
|
|
64
|
+
const cmd = String(args.command ?? "").toLowerCase();
|
|
65
|
+
for (const pattern of bashDeny) {
|
|
66
|
+
if (cmd.includes(pattern.toLowerCase())) {
|
|
67
|
+
throw new Error(`[varlock] Blocked: bash command matches deny pattern "${pattern}". ` +
|
|
68
|
+
`Use the load_env or load_secrets tool to access secrets.`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
for (const sp of sensitivePatterns) {
|
|
72
|
+
const fileAccessRe = new RegExp(`(cat|less|more|head|tail|bat|vim?|nano|code|type|get-content|select-string)\\s+\\S*${escapeRegex(sp)}`, "i");
|
|
73
|
+
if (fileAccessRe.test(String(args.command ?? ""))) {
|
|
74
|
+
throw new Error(`[varlock] Blocked: bash command appears to read a sensitive file (*${sp}*). ` +
|
|
75
|
+
`Use the load_env or load_secrets tool instead.`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (compiledGlobs.length > 0) {
|
|
79
|
+
const tokens = extractPathTokens(String(args.command ?? ""));
|
|
80
|
+
for (const token of tokens) {
|
|
81
|
+
for (const { source, regex } of compiledGlobs) {
|
|
82
|
+
if (regex.test(token)) {
|
|
83
|
+
throw new Error(`[varlock] Blocked: bash command references "${token}" which matches glob "${source}". ` +
|
|
84
|
+
`Use the load_env or load_secrets tool instead.`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
function isSensitive(path, patterns, globs) {
|
|
93
|
+
const lower = path.toLowerCase();
|
|
94
|
+
if (patterns.some((p) => lower.includes(p.toLowerCase()))) {
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
for (const { regex } of globs) {
|
|
98
|
+
if (regex.test(path) || regex.test(lower)) {
|
|
99
|
+
return true;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
export function globToRegex(glob) {
|
|
105
|
+
let result = "";
|
|
106
|
+
let i = 0;
|
|
107
|
+
while (i < glob.length) {
|
|
108
|
+
const ch = glob[i];
|
|
109
|
+
if (ch === "*") {
|
|
110
|
+
if (glob[i + 1] === "*") {
|
|
111
|
+
if (glob[i + 2] === "/") {
|
|
112
|
+
result += "(?:.*/)?";
|
|
113
|
+
i += 3;
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
result += ".*";
|
|
117
|
+
i += 2;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
result += "[^/]*";
|
|
122
|
+
i++;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
else if (ch === "?") {
|
|
126
|
+
result += "[^/]";
|
|
127
|
+
i++;
|
|
128
|
+
}
|
|
129
|
+
else if (ch === ".") {
|
|
130
|
+
result += "\\.";
|
|
131
|
+
i++;
|
|
132
|
+
}
|
|
133
|
+
else if (ch === "/" || ch === "\\") {
|
|
134
|
+
result += "[\\\\/]";
|
|
135
|
+
i++;
|
|
136
|
+
}
|
|
137
|
+
else if ("(){}[]^$+|".includes(ch)) {
|
|
138
|
+
result += "\\" + ch;
|
|
139
|
+
i++;
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
result += ch;
|
|
143
|
+
i++;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
return new RegExp(`^${result}$`, "i");
|
|
147
|
+
}
|
|
148
|
+
function extractPathTokens(cmd) {
|
|
149
|
+
const tokenRe = /(?:^|\s)((?:\.{0,2}\/)?[a-zA-Z0-9_./-]+\.[a-zA-Z0-9_.*]+)/g;
|
|
150
|
+
const tokens = [];
|
|
151
|
+
let match;
|
|
152
|
+
while ((match = tokenRe.exec(cmd)) !== null) {
|
|
153
|
+
const token = match[1].trim();
|
|
154
|
+
if (token.length > 1 && !token.startsWith("-")) {
|
|
155
|
+
tokens.push(token);
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return tokens;
|
|
159
|
+
}
|
|
160
|
+
function escapeRegex(s) {
|
|
161
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"guard.js","sourceRoot":"","sources":["../src/guard.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA"}
|
package/dist/plugin.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type Plugin } from "@opencode-ai/plugin";
|
|
2
|
+
import { type PluginConfig, type DeepPartial } from "./config.js";
|
|
3
|
+
export declare const VarlockPlugin: Plugin;
|
|
4
|
+
export declare function createVarlockPlugin(overrides?: DeepPartial<PluginConfig>): Plugin;
|
|
5
|
+
export default VarlockPlugin;
|
|
6
|
+
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,MAAM,EAAQ,MAAM,qBAAqB,CAAA;AACvD,OAAO,EAAc,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAA;AAQ7E,eAAO,MAAM,aAAa,EAAE,MAE3B,CAAA;AAED,wBAAgB,mBAAmB,CACjC,SAAS,GAAE,WAAW,CAAC,YAAY,CAAM,GACxC,MAAM,CA0DR;AAED,eAAe,aAAa,CAAA"}
|
package/dist/plugin.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { tool } from "@opencode-ai/plugin";
|
|
2
|
+
import { loadConfig } from "./config.js";
|
|
3
|
+
import { createEnvGuard } from "./guard.js";
|
|
4
|
+
import { createLoadEnvTool, createLoadSecretsTool, createSecretStatusTool, } from "./tools.js";
|
|
5
|
+
export const VarlockPlugin = async (ctx) => {
|
|
6
|
+
return createVarlockPlugin()(ctx);
|
|
7
|
+
};
|
|
8
|
+
export function createVarlockPlugin(overrides = {}) {
|
|
9
|
+
return async ({ $, project, directory }) => {
|
|
10
|
+
const cwd = directory ?? process.cwd();
|
|
11
|
+
const config = loadConfig(cwd, overrides);
|
|
12
|
+
let varlockAvailable = config.varlock.enabled;
|
|
13
|
+
if (!varlockAvailable && config.varlock.autoDetect) {
|
|
14
|
+
try {
|
|
15
|
+
const result = await $ `which ${config.varlock.command}`.quiet();
|
|
16
|
+
varlockAvailable = result.exitCode === 0;
|
|
17
|
+
if (varlockAvailable) {
|
|
18
|
+
console.log(`[varlock] Auto-detected "${config.varlock.command}" CLI`);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
varlockAvailable = false;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const tools = {};
|
|
26
|
+
if (config.env.enabled) {
|
|
27
|
+
tools.load_env = createLoadEnvTool(config.env);
|
|
28
|
+
}
|
|
29
|
+
if (varlockAvailable) {
|
|
30
|
+
tools.load_secrets = createLoadSecretsTool($, config.varlock);
|
|
31
|
+
tools.secret_status = createSecretStatusTool($, config.varlock);
|
|
32
|
+
}
|
|
33
|
+
const hookResult = {
|
|
34
|
+
tool: tools,
|
|
35
|
+
event: async ({ event }) => {
|
|
36
|
+
if (event.type === "session.created") {
|
|
37
|
+
const sources = [];
|
|
38
|
+
if (config.env.enabled)
|
|
39
|
+
sources.push(".env");
|
|
40
|
+
if (varlockAvailable)
|
|
41
|
+
sources.push(`varlock (${config.varlock.command})`);
|
|
42
|
+
const guardStatus = config.guard.enabled
|
|
43
|
+
? `${config.guard.sensitivePatterns.length} patterns, ${config.guard.sensitiveGlobs.length} globs`
|
|
44
|
+
: "disabled";
|
|
45
|
+
console.log(`[varlock] Sources: ${sources.join(", ") || "none"} | Guard: ${guardStatus}`);
|
|
46
|
+
}
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
if (config.guard.enabled) {
|
|
50
|
+
hookResult["tool.execute.before"] = createEnvGuard(config.guard);
|
|
51
|
+
}
|
|
52
|
+
return hookResult;
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
export default VarlockPlugin;
|
|
56
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../src/plugin.ts"],"names":[],"mappings":"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"}
|
package/dist/tools.d.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { EnvConfig, VarlockConfig } from "./config.js";
|
|
2
|
+
export declare function createLoadEnvTool(envConfig: EnvConfig): {
|
|
3
|
+
description: string;
|
|
4
|
+
args: {
|
|
5
|
+
path: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodString>>;
|
|
6
|
+
override: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodBoolean>>;
|
|
7
|
+
prefix: import("zod").ZodOptional<import("zod").ZodString>;
|
|
8
|
+
};
|
|
9
|
+
execute(args: {
|
|
10
|
+
path: string;
|
|
11
|
+
override: boolean;
|
|
12
|
+
prefix?: string | undefined;
|
|
13
|
+
}, context: import("@opencode-ai/plugin").ToolContext): Promise<string>;
|
|
14
|
+
};
|
|
15
|
+
export declare function createLoadSecretsTool($: any, varlockConfig: VarlockConfig): {
|
|
16
|
+
description: string;
|
|
17
|
+
args: {
|
|
18
|
+
namespace: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodString>>;
|
|
19
|
+
keys: import("zod").ZodOptional<import("zod").ZodArray<import("zod").ZodString>>;
|
|
20
|
+
override: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodBoolean>>;
|
|
21
|
+
envPrefix: import("zod").ZodOptional<import("zod").ZodString>;
|
|
22
|
+
};
|
|
23
|
+
execute(args: {
|
|
24
|
+
namespace: string;
|
|
25
|
+
override: boolean;
|
|
26
|
+
keys?: string[] | undefined;
|
|
27
|
+
envPrefix?: string | undefined;
|
|
28
|
+
}, context: import("@opencode-ai/plugin").ToolContext): Promise<string>;
|
|
29
|
+
};
|
|
30
|
+
export declare function createSecretStatusTool($: any, varlockConfig: VarlockConfig): {
|
|
31
|
+
description: string;
|
|
32
|
+
args: {
|
|
33
|
+
namespace: import("zod").ZodDefault<import("zod").ZodOptional<import("zod").ZodString>>;
|
|
34
|
+
};
|
|
35
|
+
execute(args: {
|
|
36
|
+
namespace: string;
|
|
37
|
+
}, context: import("@opencode-ai/plugin").ToolContext): Promise<string>;
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE3D,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,SAAS;;;;;;;;;;;;EAyFrD;AAED,wBAAgB,qBAAqB,CACnC,CAAC,EAAE,GAAG,EACN,aAAa,EAAE,aAAa;;;;;;;;;;;;;;EAoG7B;AAED,wBAAgB,sBAAsB,CACpC,CAAC,EAAE,GAAG,EACN,aAAa,EAAE,aAAa;;;;;;;;EAsD7B"}
|