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/dist/tools.js ADDED
@@ -0,0 +1,216 @@
1
+ import { tool } from "@opencode-ai/plugin";
2
+ import { readFileSync, existsSync } from "fs";
3
+ import { resolve } from "path";
4
+ export function createLoadEnvTool(envConfig) {
5
+ const allowedRoot = resolve(envConfig.allowedRoot);
6
+ return tool({
7
+ description: [
8
+ "Load environment variables from a .env file into the running process.",
9
+ "Returns the names of variables that were set - never the values.",
10
+ "The agent can then write code that references process.env.VAR_NAME",
11
+ "without ever seeing the actual secret.",
12
+ ].join(" "),
13
+ args: {
14
+ path: tool.schema
15
+ .string()
16
+ .optional()
17
+ .default(".env")
18
+ .describe("Relative or absolute path to the .env file"),
19
+ override: tool.schema
20
+ .boolean()
21
+ .optional()
22
+ .default(false)
23
+ .describe("Replace vars that already exist in the environment"),
24
+ prefix: tool.schema
25
+ .string()
26
+ .optional()
27
+ .describe("Only load vars whose name starts with this prefix"),
28
+ },
29
+ async execute(args) {
30
+ const envPath = resolve(args.path);
31
+ if (!envPath.startsWith(allowedRoot)) {
32
+ throw new Error(`[varlock] Path "${args.path}" resolves outside the allowed root. ` +
33
+ `Only .env files under "${allowedRoot}" are permitted.`);
34
+ }
35
+ if (!existsSync(envPath)) {
36
+ throw new Error(`[varlock] File not found: ${envPath}`);
37
+ }
38
+ const content = readFileSync(envPath, "utf-8");
39
+ const loaded = [];
40
+ const skipped = [];
41
+ for (const line of content.split("\n")) {
42
+ const trimmed = line.trim();
43
+ if (!trimmed || trimmed.startsWith("#"))
44
+ continue;
45
+ const eqIdx = trimmed.indexOf("=");
46
+ if (eqIdx === -1)
47
+ continue;
48
+ let keyPart = trimmed.slice(0, eqIdx).trim();
49
+ if (keyPart.startsWith("export ")) {
50
+ keyPart = keyPart.slice(7).trim();
51
+ }
52
+ if (args.prefix && !keyPart.startsWith(args.prefix))
53
+ continue;
54
+ let value = trimmed.slice(eqIdx + 1).trim();
55
+ if ((value.startsWith('"') && value.endsWith('"')) ||
56
+ (value.startsWith("'") && value.endsWith("'"))) {
57
+ value = value.slice(1, -1);
58
+ }
59
+ if (process.env[keyPart] && !args.override) {
60
+ skipped.push(keyPart);
61
+ continue;
62
+ }
63
+ process.env[keyPart] = value;
64
+ loaded.push(keyPart);
65
+ }
66
+ return JSON.stringify({
67
+ status: "ok",
68
+ source: args.path,
69
+ loaded,
70
+ skipped,
71
+ message: `Loaded ${loaded.length} variable(s): ${loaded.join(", ") || "(none)"}` +
72
+ (skipped.length
73
+ ? `. Skipped ${skipped.length} existing: ${skipped.join(", ")}`
74
+ : ""),
75
+ });
76
+ },
77
+ });
78
+ }
79
+ export function createLoadSecretsTool($, varlockConfig) {
80
+ const cmd = varlockConfig.command;
81
+ const defaultNs = varlockConfig.namespace;
82
+ return tool({
83
+ description: [
84
+ "Load secrets from Varlock into the running process environment.",
85
+ "Varlock retrieves secrets from the configured backend (pass, Azure Key Vault, etc.).",
86
+ "Returns only the names of loaded variables - never the values.",
87
+ ].join(" "),
88
+ args: {
89
+ namespace: tool.schema
90
+ .string()
91
+ .optional()
92
+ .default(defaultNs)
93
+ .describe("Varlock namespace / path prefix to load from"),
94
+ keys: tool.schema
95
+ .array(tool.schema.string())
96
+ .optional()
97
+ .describe("Specific secret keys to load. If omitted, loads all keys in the namespace."),
98
+ override: tool.schema
99
+ .boolean()
100
+ .optional()
101
+ .default(false)
102
+ .describe("Replace vars that already exist in the environment"),
103
+ envPrefix: tool.schema
104
+ .string()
105
+ .optional()
106
+ .describe("Prefix to add to env var names, e.g. 'APP_' turns 'db_url' into 'APP_DB_URL'"),
107
+ },
108
+ async execute(args) {
109
+ const ns = args.namespace;
110
+ let keyList;
111
+ if (args.keys && args.keys.length > 0) {
112
+ keyList = args.keys;
113
+ }
114
+ else {
115
+ try {
116
+ const raw = await $ `${cmd} list ${ns}`.text();
117
+ keyList = raw
118
+ .trim()
119
+ .split("\n")
120
+ .filter((k) => k.length > 0);
121
+ }
122
+ catch (err) {
123
+ throw new Error(`[varlock] Failed to list keys in namespace "${ns}": ${err.message}`);
124
+ }
125
+ }
126
+ const loaded = [];
127
+ const failed = [];
128
+ const skipped = [];
129
+ for (const key of keyList) {
130
+ const envName = args.envPrefix
131
+ ? `${args.envPrefix}${key.toUpperCase()}`
132
+ : key.toUpperCase();
133
+ if (process.env[envName] && !args.override) {
134
+ skipped.push(envName);
135
+ continue;
136
+ }
137
+ try {
138
+ const value = (await $ `${cmd} get ${ns}/${key}`.text()).trim();
139
+ if (value) {
140
+ process.env[envName] = value;
141
+ loaded.push(envName);
142
+ }
143
+ }
144
+ catch {
145
+ failed.push(key);
146
+ }
147
+ }
148
+ const parts = [
149
+ `Loaded ${loaded.length} secret(s): ${loaded.join(", ") || "(none)"}`,
150
+ ];
151
+ if (skipped.length) {
152
+ parts.push(`Skipped ${skipped.length} existing: ${skipped.join(", ")}`);
153
+ }
154
+ if (failed.length) {
155
+ parts.push(`Failed ${failed.length}: ${failed.join(", ")}`);
156
+ }
157
+ return JSON.stringify({
158
+ status: failed.length === keyList.length ? "error" : "ok",
159
+ source: `varlock/${ns}`,
160
+ loaded,
161
+ skipped,
162
+ failed,
163
+ message: parts.join(". "),
164
+ });
165
+ },
166
+ });
167
+ }
168
+ export function createSecretStatusTool($, varlockConfig) {
169
+ const cmd = varlockConfig.command;
170
+ const defaultNs = varlockConfig.namespace;
171
+ return tool({
172
+ description: [
173
+ "Check which secrets are available in Varlock and which are",
174
+ "currently loaded in the process environment.",
175
+ "Returns key names and loaded/unloaded status - never values.",
176
+ ].join(" "),
177
+ args: {
178
+ namespace: tool.schema
179
+ .string()
180
+ .optional()
181
+ .default(defaultNs)
182
+ .describe("Varlock namespace to inspect"),
183
+ },
184
+ async execute(args) {
185
+ const ns = args.namespace;
186
+ let available;
187
+ try {
188
+ const raw = await $ `${cmd} list ${ns}`.text();
189
+ available = raw
190
+ .trim()
191
+ .split("\n")
192
+ .filter((k) => k.length > 0);
193
+ }
194
+ catch (err) {
195
+ throw new Error(`[varlock] Cannot list namespace "${ns}": ${err.message}`);
196
+ }
197
+ const status = available.map((key) => {
198
+ const envName = key.toUpperCase();
199
+ return {
200
+ key,
201
+ envName,
202
+ loaded: envName in process.env,
203
+ };
204
+ });
205
+ const loadedCount = status.filter((s) => s.loaded).length;
206
+ return JSON.stringify({
207
+ namespace: ns,
208
+ total: available.length,
209
+ loaded: loadedCount,
210
+ unloaded: available.length - loadedCount,
211
+ keys: status,
212
+ });
213
+ },
214
+ });
215
+ }
216
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAA;AAG9B,MAAM,UAAU,iBAAiB,CAAC,SAAoB;IACpD,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;IAElD,OAAO,IAAI,CAAC;QACV,WAAW,EAAE;YACX,uEAAuE;YACvE,kEAAkE;YAClE,oEAAoE;YACpE,wCAAwC;SACzC,CAAC,IAAI,CAAC,GAAG,CAAC;QACX,IAAI,EAAE;YACJ,IAAI,EAAE,IAAI,CAAC,MAAM;iBACd,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,OAAO,CAAC,MAAM,CAAC;iBACf,QAAQ,CAAC,4CAA4C,CAAC;YACzD,QAAQ,EAAE,IAAI,CAAC,MAAM;iBAClB,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CAAC,oDAAoD,CAAC;YACjE,MAAM,EAAE,IAAI,CAAC,MAAM;iBAChB,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,mDAAmD,CAAC;SACjE;QACD,KAAK,CAAC,OAAO,CAAC,IAAI;YAChB,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YAElC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;gBACrC,MAAM,IAAI,KAAK,CACb,mBAAmB,IAAI,CAAC,IAAI,uCAAuC;oBACjE,0BAA0B,WAAW,kBAAkB,CAC1D,CAAA;YACH,CAAC;YAED,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,6BAA6B,OAAO,EAAE,CAAC,CAAA;YACzD,CAAC;YAED,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;YAC9C,MAAM,MAAM,GAAa,EAAE,CAAA;YAC3B,MAAM,OAAO,GAAa,EAAE,CAAA;YAE5B,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;gBAE3B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,SAAQ;gBAEjD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;gBAClC,IAAI,KAAK,KAAK,CAAC,CAAC;oBAAE,SAAQ;gBAE1B,IAAI,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAA;gBAC5C,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;oBAClC,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;gBACnC,CAAC;gBAED,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC;oBAAE,SAAQ;gBAE7D,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;gBAC3C,IACE,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;oBAC9C,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAC9C,CAAC;oBACD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;gBAC5B,CAAC;gBAED,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAC3C,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;oBACrB,SAAQ;gBACV,CAAC;gBAED,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,CAAA;gBAC5B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACtB,CAAC;YAED,OAAO,IAAI,CAAC,SAAS,CAAC;gBACpB,MAAM,EAAE,IAAI;gBACZ,MAAM,EAAE,IAAI,CAAC,IAAI;gBACjB,MAAM;gBACN,OAAO;gBACP,OAAO,EACL,UAAU,MAAM,CAAC,MAAM,iBAAiB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE;oBACvE,CAAC,OAAO,CAAC,MAAM;wBACb,CAAC,CAAC,aAAa,OAAO,CAAC,MAAM,cAAc,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;wBAC/D,CAAC,CAAC,EAAE,CAAC;aACV,CAAC,CAAA;QACJ,CAAC;KACF,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,CAAM,EACN,aAA4B;IAE5B,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAA;IACjC,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAA;IAEzC,OAAO,IAAI,CAAC;QACV,WAAW,EAAE;YACX,iEAAiE;YACjE,sFAAsF;YACtF,gEAAgE;SACjE,CAAC,IAAI,CAAC,GAAG,CAAC;QACX,IAAI,EAAE;YACJ,SAAS,EAAE,IAAI,CAAC,MAAM;iBACnB,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,OAAO,CAAC,SAAS,CAAC;iBAClB,QAAQ,CAAC,8CAA8C,CAAC;YAC3D,IAAI,EAAE,IAAI,CAAC,MAAM;iBACd,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;iBAC3B,QAAQ,EAAE;iBACV,QAAQ,CACP,4EAA4E,CAC7E;YACH,QAAQ,EAAE,IAAI,CAAC,MAAM;iBAClB,OAAO,EAAE;iBACT,QAAQ,EAAE;iBACV,OAAO,CAAC,KAAK,CAAC;iBACd,QAAQ,CAAC,oDAAoD,CAAC;YACjE,SAAS,EAAE,IAAI,CAAC,MAAM;iBACnB,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CACP,8EAA8E,CAC/E;SACJ;QACD,KAAK,CAAC,OAAO,CAAC,IAAI;YAChB,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAA;YAEzB,IAAI,OAAiB,CAAA;YACrB,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACtC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAA;YACrB,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC;oBACH,MAAM,GAAG,GAAG,MAAM,CAAC,CAAA,GAAG,GAAG,SAAS,EAAE,EAAE,CAAC,IAAI,EAAE,CAAA;oBAC7C,OAAO,GAAG,GAAG;yBACV,IAAI,EAAE;yBACN,KAAK,CAAC,IAAI,CAAC;yBACX,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;gBACxC,CAAC;gBAAC,OAAO,GAAQ,EAAE,CAAC;oBAClB,MAAM,IAAI,KAAK,CACb,+CAA+C,EAAE,MAAM,GAAG,CAAC,OAAO,EAAE,CACrE,CAAA;gBACH,CAAC;YACH,CAAC;YAED,MAAM,MAAM,GAAa,EAAE,CAAA;YAC3B,MAAM,MAAM,GAAa,EAAE,CAAA;YAC3B,MAAM,OAAO,GAAa,EAAE,CAAA;YAE5B,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS;oBAC5B,CAAC,CAAC,GAAG,IAAI,CAAC,SAAS,GAAG,GAAG,CAAC,WAAW,EAAE,EAAE;oBACzC,CAAC,CAAC,GAAG,CAAC,WAAW,EAAE,CAAA;gBAErB,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAC3C,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;oBACrB,SAAQ;gBACV,CAAC;gBAED,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,CAAC,MAAM,CAAC,CAAA,GAAG,GAAG,QAAQ,EAAE,IAAI,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;oBAC9D,IAAI,KAAK,EAAE,CAAC;wBACV,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,KAAK,CAAA;wBAC5B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;oBACtB,CAAC;gBACH,CAAC;gBAAC,MAAM,CAAC;oBACP,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;gBAClB,CAAC;YACH,CAAC;YAED,MAAM,KAAK,GAAG;gBACZ,UAAU,MAAM,CAAC,MAAM,eAAe,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE;aACtE,CAAA;YACD,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,KAAK,CAAC,IAAI,CAAC,WAAW,OAAO,CAAC,MAAM,cAAc,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YACzE,CAAC;YACD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClB,KAAK,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YAC7D,CAAC;YAED,OAAO,IAAI,CAAC,SAAS,CAAC;gBACpB,MAAM,EAAE,MAAM,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI;gBACzD,MAAM,EAAE,WAAW,EAAE,EAAE;gBACvB,MAAM;gBACN,OAAO;gBACP,MAAM;gBACN,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;aAC1B,CAAC,CAAA;QACJ,CAAC;KACF,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,sBAAsB,CACpC,CAAM,EACN,aAA4B;IAE5B,MAAM,GAAG,GAAG,aAAa,CAAC,OAAO,CAAA;IACjC,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAA;IAEzC,OAAO,IAAI,CAAC;QACV,WAAW,EAAE;YACX,4DAA4D;YAC5D,8CAA8C;YAC9C,8DAA8D;SAC/D,CAAC,IAAI,CAAC,GAAG,CAAC;QACX,IAAI,EAAE;YACJ,SAAS,EAAE,IAAI,CAAC,MAAM;iBACnB,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,OAAO,CAAC,SAAS,CAAC;iBAClB,QAAQ,CAAC,8BAA8B,CAAC;SAC5C;QACD,KAAK,CAAC,OAAO,CAAC,IAAI;YAChB,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAA;YAEzB,IAAI,SAAmB,CAAA;YACvB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,CAAC,CAAA,GAAG,GAAG,SAAS,EAAE,EAAE,CAAC,IAAI,EAAE,CAAA;gBAC7C,SAAS,GAAG,GAAG;qBACZ,IAAI,EAAE;qBACN,KAAK,CAAC,IAAI,CAAC;qBACX,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;YACxC,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,MAAM,IAAI,KAAK,CACb,oCAAoC,EAAE,MAAM,GAAG,CAAC,OAAO,EAAE,CAC1D,CAAA;YACH,CAAC;YAED,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBACnC,MAAM,OAAO,GAAG,GAAG,CAAC,WAAW,EAAE,CAAA;gBACjC,OAAO;oBACL,GAAG;oBACH,OAAO;oBACP,MAAM,EAAE,OAAO,IAAI,OAAO,CAAC,GAAG;iBAC/B,CAAA;YACH,CAAC,CAAC,CAAA;YAEF,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAA;YAEzD,OAAO,IAAI,CAAC,SAAS,CAAC;gBACpB,SAAS,EAAE,EAAE;gBACb,KAAK,EAAE,SAAS,CAAC,MAAM;gBACvB,MAAM,EAAE,WAAW;gBACnB,QAAQ,EAAE,SAAS,CAAC,MAAM,GAAG,WAAW;gBACxC,IAAI,EAAE,MAAM;aACb,CAAC,CAAA;QACJ,CAAC;KACF,CAAC,CAAA;AACJ,CAAC"}
package/package.json ADDED
@@ -0,0 +1,78 @@
1
+ {
2
+ "name": "opencode-varlock",
3
+ "version": "0.0.1",
4
+ "type": "module",
5
+ "description": "OpenCode plugin for secret management via Varlock with configurable env guard protection",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "default": "./dist/index.js"
12
+ },
13
+ "./config": {
14
+ "types": "./dist/config.d.ts",
15
+ "default": "./dist/config.js"
16
+ },
17
+ "./guard": {
18
+ "types": "./dist/guard.d.ts",
19
+ "default": "./dist/guard.js"
20
+ },
21
+ "./tools": {
22
+ "types": "./dist/tools.d.ts",
23
+ "default": "./dist/tools.js"
24
+ },
25
+ "./plugin": {
26
+ "types": "./dist/plugin.d.ts",
27
+ "default": "./dist/plugin.js"
28
+ },
29
+ "./permissions": "./assets/permissions.json",
30
+ "./varlock.config.json": "./assets/varlock.config.json",
31
+ "./varlock.schema.json": "./assets/varlock.schema.json",
32
+ "./assets/permissions.json": "./assets/permissions.json",
33
+ "./assets/varlock.config.json": "./assets/varlock.config.json",
34
+ "./assets/varlock.schema.json": "./assets/varlock.schema.json"
35
+ },
36
+ "files": [
37
+ "dist/",
38
+ "assets/",
39
+ "README.md",
40
+ "LICENSE"
41
+ ],
42
+ "keywords": [
43
+ "opencode",
44
+ "opencode-ai",
45
+ "opencode-plugin",
46
+ "varlock",
47
+ "secrets",
48
+ "env",
49
+ "security",
50
+ "guard"
51
+ ],
52
+ "homepage": "https://github.com/itlackey/opencode-varlock#readme",
53
+ "bugs": {
54
+ "url": "https://github.com/itlackey/opencode-varlock/issues"
55
+ },
56
+ "scripts": {
57
+ "build": "tsc --project ./tsconfig.json",
58
+ "clean": "rm -rf ./dist",
59
+ "typecheck": "tsc --project ./tsconfig.json --noEmit",
60
+ "validate": "npm run typecheck && npm run build && npm pack --dry-run",
61
+ "prepublishOnly": "npm run clean && npm run validate"
62
+ },
63
+ "publishConfig": {
64
+ "access": "public"
65
+ },
66
+ "dependencies": {
67
+ "@opencode-ai/plugin": "^1.2.20"
68
+ },
69
+ "devDependencies": {
70
+ "@types/node": "^22.13.10",
71
+ "typescript": "^5.9.3"
72
+ },
73
+ "license": "MPL-2.0",
74
+ "repository": {
75
+ "type": "git",
76
+ "url": "https://github.com/itlackey/opencode-varlock"
77
+ }
78
+ }