@alfe.ai/openclaw-secrets 0.1.14 → 0.2.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/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +21 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +49 -45
- package/dist/index.js.map +1 -1
- package/dist/scope-resolve.d.ts +22 -0
- package/dist/scope-resolve.d.ts.map +1 -0
- package/dist/scope-resolve.js +39 -0
- package/dist/scope-resolve.js.map +1 -0
- package/package.json +2 -2
- package/src/__tests__/scope-resolve.test.ts +62 -0
- package/src/index.ts +50 -45
- package/src/scope-resolve.ts +53 -0
package/.turbo/turbo-build.log
CHANGED
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
# @alfe.ai/openclaw-secrets
|
|
2
2
|
|
|
3
|
+
## 0.2.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 28b68cd: Auto-fill `scopeId` from `ctx.agentId` for `scope === "agent"` and tighten every tool's schema description so an LLM can't pick the literal word `"agent"` as the ID. Previously, the plugin's tool schemas required `scopeId` with no description, which led to LLMs writing the literal string `"agent"` and stranding secret rows at `scopeId="agent"` instead of the real agent ID. The corresponding server-side enforcement (`requireAgentSelfScope`) now rejects that same mistake, but the plugin should make the happy path discoverable rather than fail-closed.
|
|
8
|
+
|
|
9
|
+
Behaviour:
|
|
10
|
+
|
|
11
|
+
- `scope: "agent"` with `scopeId` omitted, empty, or the literal `"agent"` → falls back to `ctx.agentId` from the OpenClaw runtime.
|
|
12
|
+
- `scope: "agent"` with a real agent ID → passed through (server-side enforces it must equal the calling agent).
|
|
13
|
+
- `scope: "org" | "team" | "project"` → `scopeId` is still required and validated as before.
|
|
14
|
+
|
|
15
|
+
`scopeId` is now optional in the JSON schema for `scope: "agent"`. Agents on older runtimes that don't populate `ctx.agentId` will see a clear error pointing them at `secret_list_scopes` for the canonical ID.
|
|
16
|
+
|
|
17
|
+
## 0.1.15
|
|
18
|
+
|
|
19
|
+
### Patch Changes
|
|
20
|
+
|
|
21
|
+
- Updated dependencies [47b38af]
|
|
22
|
+
- @alfe.ai/agent-api-client@0.1.2
|
|
23
|
+
|
|
3
24
|
## 0.1.14
|
|
4
25
|
|
|
5
26
|
### Patch Changes
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA2CA,UAAU,YAAY;IACpB,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC3D,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC5D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC3D,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAC7D;AAED,UAAU,WAAW;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,IAAI;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,OAAO,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACpF;AAED,UAAU,SAAS;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,EAAE,YAAY,CAAC;IACrB,YAAY,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,IAAI,CAAC;IACzF,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC7I,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACxG,8BAA8B,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE;QAAE,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;KAAE,KAAK,MAAM,EAAE,KAAK,IAAI,CAAC;CAC3G;;;;;;;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA2CA,UAAU,YAAY;IACpB,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC3D,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC5D,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IAC3D,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAC7D;AAED,UAAU,WAAW;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,UAAU,IAAI;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,OAAO,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACpF;AAED,UAAU,SAAS;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,MAAM,EAAE,YAAY,CAAC;IACrB,YAAY,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,IAAI,EAAE,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,IAAI,CAAC;IACzF,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAC7I,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,EAAE,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IACxG,8BAA8B,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE;QAAE,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;KAAE,KAAK,MAAM,EAAE,KAAK,IAAI,CAAC;CAC3G;;;;;;;kBA2Fe,SAAS,GAAG,IAAI;;AAPhC,wBAgdE"}
|
package/dist/index.js
CHANGED
|
@@ -58,6 +58,10 @@ function parseString(raw, field, max = 256) {
|
|
|
58
58
|
}
|
|
59
59
|
return raw;
|
|
60
60
|
}
|
|
61
|
+
// Re-export the local-friendly type alias so the rest of the file
|
|
62
|
+
// continues to refer to ToolContext (which has agentId? on it). The
|
|
63
|
+
// scope-resolve helper is structurally compatible.
|
|
64
|
+
import { resolveScopeId, SCOPE_ID_DESCRIPTION } from "./scope-resolve.js";
|
|
61
65
|
function parseSecretName(raw) {
|
|
62
66
|
const s = parseString(raw, "name", 128);
|
|
63
67
|
if (!NAME_REGEX.test(s)) {
|
|
@@ -146,7 +150,7 @@ export default {
|
|
|
146
150
|
api.registerTool(() => ({
|
|
147
151
|
name: "secret_list_scopes",
|
|
148
152
|
label: "List Secret Scopes",
|
|
149
|
-
description: "List scopes (org/team/project/agent) the agent can manage secrets in.",
|
|
153
|
+
description: "List scopes (org/team/project/agent) the agent can manage secrets in. The returned `scopeId` values are the IDs to pass into the other secret tools — never pass the literal word \"agent\" as a scopeId; for agent scope, omit scopeId and the runtime will fill in the current agent's ID.",
|
|
150
154
|
parameters: { type: "object", properties: {} },
|
|
151
155
|
execute: async () => {
|
|
152
156
|
const scopes = await client.listSecretScopes();
|
|
@@ -154,7 +158,7 @@ export default {
|
|
|
154
158
|
},
|
|
155
159
|
}), { names: ["secret_list_scopes"] });
|
|
156
160
|
// ─── secret_list ────────────────────────────────────────────
|
|
157
|
-
api.registerTool(() => ({
|
|
161
|
+
api.registerTool((ctx) => ({
|
|
158
162
|
name: "secret_list",
|
|
159
163
|
label: "List Secrets",
|
|
160
164
|
description: "List secret metadata in a scope. Optional category/tag/fieldKey filters route through the byFacet GSI.",
|
|
@@ -162,16 +166,16 @@ export default {
|
|
|
162
166
|
type: "object",
|
|
163
167
|
properties: {
|
|
164
168
|
scope: { type: "string", enum: VALID_SCOPES },
|
|
165
|
-
scopeId: { type: "string" },
|
|
169
|
+
scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
|
|
166
170
|
category: { type: "string", enum: VALID_CATEGORIES },
|
|
167
171
|
tag: { type: "string" },
|
|
168
172
|
fieldKey: { type: "string" },
|
|
169
173
|
},
|
|
170
|
-
required: ["scope"
|
|
174
|
+
required: ["scope"],
|
|
171
175
|
},
|
|
172
176
|
execute: async (_id, params) => {
|
|
173
177
|
const scope = parseScope(params.scope);
|
|
174
|
-
const scopeId =
|
|
178
|
+
const scopeId = resolveScopeId(scope, params, ctx);
|
|
175
179
|
const category = typeof params.category === "string" ? params.category : undefined;
|
|
176
180
|
const tag = typeof params.tag === "string" ? params.tag : undefined;
|
|
177
181
|
const fieldKey = typeof params.fieldKey === "string" ? params.fieldKey : undefined;
|
|
@@ -180,7 +184,7 @@ export default {
|
|
|
180
184
|
},
|
|
181
185
|
}), { names: ["secret_list"] });
|
|
182
186
|
// ─── secret_set ─────────────────────────────────────────────
|
|
183
|
-
api.registerTool(() => ({
|
|
187
|
+
api.registerTool((ctx) => ({
|
|
184
188
|
name: "secret_set",
|
|
185
189
|
label: "Set Secret",
|
|
186
190
|
description: "Create a new secret with one or more fields. Encrypted fields are sealed locally before upload.",
|
|
@@ -188,7 +192,7 @@ export default {
|
|
|
188
192
|
type: "object",
|
|
189
193
|
properties: {
|
|
190
194
|
scope: { type: "string", enum: VALID_SCOPES },
|
|
191
|
-
scopeId: { type: "string" },
|
|
195
|
+
scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
|
|
192
196
|
name: { type: "string", description: "Human-readable secret name (unique within scope)" },
|
|
193
197
|
category: { type: "string", enum: VALID_CATEGORIES, description: "Defaults to 'other'" },
|
|
194
198
|
description: { type: "string" },
|
|
@@ -212,11 +216,11 @@ export default {
|
|
|
212
216
|
value: { type: "string", description: "Shorthand for fields=[{ key: 'value', sensitivity: 'encrypted', value }]" },
|
|
213
217
|
reason: { type: "string" },
|
|
214
218
|
},
|
|
215
|
-
required: ["scope", "
|
|
219
|
+
required: ["scope", "name"],
|
|
216
220
|
},
|
|
217
221
|
execute: async (_id, params) => {
|
|
218
222
|
const scope = parseScope(params.scope);
|
|
219
|
-
const scopeId =
|
|
223
|
+
const scopeId = resolveScopeId(scope, params, ctx);
|
|
220
224
|
const name = parseSecretName(params.name);
|
|
221
225
|
const category = typeof params.category === "string"
|
|
222
226
|
? params.category
|
|
@@ -258,7 +262,7 @@ export default {
|
|
|
258
262
|
},
|
|
259
263
|
}), { names: ["secret_set"] });
|
|
260
264
|
// ─── secret_get (legacy: returns `value` field plaintext as a string) ──
|
|
261
|
-
api.registerTool(() => ({
|
|
265
|
+
api.registerTool((ctx) => ({
|
|
262
266
|
name: "secret_get",
|
|
263
267
|
label: "Get Secret (Legacy)",
|
|
264
268
|
description: "Fetch and decrypt the `value`-keyed field. The output is SENSITIVE; do not echo or log.",
|
|
@@ -266,14 +270,14 @@ export default {
|
|
|
266
270
|
type: "object",
|
|
267
271
|
properties: {
|
|
268
272
|
scope: { type: "string", enum: VALID_SCOPES },
|
|
269
|
-
scopeId: { type: "string" },
|
|
273
|
+
scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
|
|
270
274
|
secretId: { type: "string" },
|
|
271
275
|
},
|
|
272
|
-
required: ["scope", "
|
|
276
|
+
required: ["scope", "secretId"],
|
|
273
277
|
},
|
|
274
278
|
execute: async (_id, params) => {
|
|
275
279
|
const scope = parseScope(params.scope);
|
|
276
|
-
const scopeId =
|
|
280
|
+
const scopeId = resolveScopeId(scope, params, ctx);
|
|
277
281
|
const secretId = parseSecretId(params.secretId);
|
|
278
282
|
const field = await client.getSecretField({ scope, scopeId, secretId, fieldKey: "value" });
|
|
279
283
|
if (field.sensitivity === "plaintext") {
|
|
@@ -288,7 +292,7 @@ export default {
|
|
|
288
292
|
},
|
|
289
293
|
}), { names: ["secret_get"] });
|
|
290
294
|
// ─── secret_get_full ────────────────────────────────────────
|
|
291
|
-
api.registerTool(() => ({
|
|
295
|
+
api.registerTool((ctx) => ({
|
|
292
296
|
name: "secret_get_full",
|
|
293
297
|
label: "Get Secret (All Fields)",
|
|
294
298
|
description: "Fetch the secret aggregate with all fields decrypted. Output is SENSITIVE.",
|
|
@@ -296,14 +300,14 @@ export default {
|
|
|
296
300
|
type: "object",
|
|
297
301
|
properties: {
|
|
298
302
|
scope: { type: "string", enum: VALID_SCOPES },
|
|
299
|
-
scopeId: { type: "string" },
|
|
303
|
+
scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
|
|
300
304
|
secretId: { type: "string" },
|
|
301
305
|
},
|
|
302
|
-
required: ["scope", "
|
|
306
|
+
required: ["scope", "secretId"],
|
|
303
307
|
},
|
|
304
308
|
execute: async (_id, params) => {
|
|
305
309
|
const scope = parseScope(params.scope);
|
|
306
|
-
const scopeId =
|
|
310
|
+
const scopeId = resolveScopeId(scope, params, ctx);
|
|
307
311
|
const secretId = parseSecretId(params.secretId);
|
|
308
312
|
const { aggregate, envelopes } = await client.getSecret({ scope, scopeId, secretId });
|
|
309
313
|
const decryptedFields = await Promise.all(aggregate.fields.map(async (f) => {
|
|
@@ -329,7 +333,7 @@ export default {
|
|
|
329
333
|
},
|
|
330
334
|
}), { names: ["secret_get_full"] });
|
|
331
335
|
// ─── secret_get_field ───────────────────────────────────────
|
|
332
|
-
api.registerTool(() => ({
|
|
336
|
+
api.registerTool((ctx) => ({
|
|
333
337
|
name: "secret_get_field",
|
|
334
338
|
label: "Get Secret Field",
|
|
335
339
|
description: "Fetch and decrypt one field by key. Cheaper than secret_get_full when you only need one piece.",
|
|
@@ -337,15 +341,15 @@ export default {
|
|
|
337
341
|
type: "object",
|
|
338
342
|
properties: {
|
|
339
343
|
scope: { type: "string", enum: VALID_SCOPES },
|
|
340
|
-
scopeId: { type: "string" },
|
|
344
|
+
scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
|
|
341
345
|
secretId: { type: "string" },
|
|
342
346
|
fieldKey: { type: "string" },
|
|
343
347
|
},
|
|
344
|
-
required: ["scope", "
|
|
348
|
+
required: ["scope", "secretId", "fieldKey"],
|
|
345
349
|
},
|
|
346
350
|
execute: async (_id, params) => {
|
|
347
351
|
const scope = parseScope(params.scope);
|
|
348
|
-
const scopeId =
|
|
352
|
+
const scopeId = resolveScopeId(scope, params, ctx);
|
|
349
353
|
const secretId = parseSecretId(params.secretId);
|
|
350
354
|
const fieldKey = parseFieldKey(params.fieldKey);
|
|
351
355
|
const field = await client.getSecretField({ scope, scopeId, secretId, fieldKey });
|
|
@@ -361,7 +365,7 @@ export default {
|
|
|
361
365
|
},
|
|
362
366
|
}), { names: ["secret_get_field"] });
|
|
363
367
|
// ─── secret_set_field ───────────────────────────────────────
|
|
364
|
-
api.registerTool(() => ({
|
|
368
|
+
api.registerTool((ctx) => ({
|
|
365
369
|
name: "secret_set_field",
|
|
366
370
|
label: "Set Secret Field",
|
|
367
371
|
description: "Add OR rotate one field. Same key as existing = rotate; new key = add. Encrypted fields are sealed locally.",
|
|
@@ -369,7 +373,7 @@ export default {
|
|
|
369
373
|
type: "object",
|
|
370
374
|
properties: {
|
|
371
375
|
scope: { type: "string", enum: VALID_SCOPES },
|
|
372
|
-
scopeId: { type: "string" },
|
|
376
|
+
scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
|
|
373
377
|
secretId: { type: "string" },
|
|
374
378
|
fieldKey: { type: "string" },
|
|
375
379
|
sensitivity: { type: "string", enum: VALID_SENSITIVITIES },
|
|
@@ -377,11 +381,11 @@ export default {
|
|
|
377
381
|
value: { type: "string" },
|
|
378
382
|
reason: { type: "string" },
|
|
379
383
|
},
|
|
380
|
-
required: ["scope", "
|
|
384
|
+
required: ["scope", "secretId", "fieldKey", "sensitivity", "value"],
|
|
381
385
|
},
|
|
382
386
|
execute: async (_id, params) => {
|
|
383
387
|
const scope = parseScope(params.scope);
|
|
384
|
-
const scopeId =
|
|
388
|
+
const scopeId = resolveScopeId(scope, params, ctx);
|
|
385
389
|
const secretId = parseSecretId(params.secretId);
|
|
386
390
|
const fieldKey = parseFieldKey(params.fieldKey);
|
|
387
391
|
const sensitivity = (() => {
|
|
@@ -420,7 +424,7 @@ export default {
|
|
|
420
424
|
},
|
|
421
425
|
}), { names: ["secret_set_field"] });
|
|
422
426
|
// ─── secret_remove_field ────────────────────────────────────
|
|
423
|
-
api.registerTool(() => ({
|
|
427
|
+
api.registerTool((ctx) => ({
|
|
424
428
|
name: "secret_remove_field",
|
|
425
429
|
label: "Remove Secret Field",
|
|
426
430
|
description: "Remove one field from a secret. Other fields untouched.",
|
|
@@ -428,15 +432,15 @@ export default {
|
|
|
428
432
|
type: "object",
|
|
429
433
|
properties: {
|
|
430
434
|
scope: { type: "string", enum: VALID_SCOPES },
|
|
431
|
-
scopeId: { type: "string" },
|
|
435
|
+
scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
|
|
432
436
|
secretId: { type: "string" },
|
|
433
437
|
fieldKey: { type: "string" },
|
|
434
438
|
},
|
|
435
|
-
required: ["scope", "
|
|
439
|
+
required: ["scope", "secretId", "fieldKey"],
|
|
436
440
|
},
|
|
437
441
|
execute: async (_id, params) => {
|
|
438
442
|
const scope = parseScope(params.scope);
|
|
439
|
-
const scopeId =
|
|
443
|
+
const scopeId = resolveScopeId(scope, params, ctx);
|
|
440
444
|
const secretId = parseSecretId(params.secretId);
|
|
441
445
|
const fieldKey = parseFieldKey(params.fieldKey);
|
|
442
446
|
await client.removeSecretField({ scope, scopeId, secretId, fieldKey });
|
|
@@ -445,7 +449,7 @@ export default {
|
|
|
445
449
|
},
|
|
446
450
|
}), { names: ["secret_remove_field"] });
|
|
447
451
|
// ─── secret_update_metadata ─────────────────────────────────
|
|
448
|
-
api.registerTool(() => ({
|
|
452
|
+
api.registerTool((ctx) => ({
|
|
449
453
|
name: "secret_update_metadata",
|
|
450
454
|
label: "Update Secret Metadata",
|
|
451
455
|
description: "Patch secret-level metadata (name, description, tags, category). Does not touch fields.",
|
|
@@ -453,7 +457,7 @@ export default {
|
|
|
453
457
|
type: "object",
|
|
454
458
|
properties: {
|
|
455
459
|
scope: { type: "string", enum: VALID_SCOPES },
|
|
456
|
-
scopeId: { type: "string" },
|
|
460
|
+
scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
|
|
457
461
|
secretId: { type: "string" },
|
|
458
462
|
secretName: { type: "string" },
|
|
459
463
|
description: { type: "string" },
|
|
@@ -461,11 +465,11 @@ export default {
|
|
|
461
465
|
category: { type: "string", enum: VALID_CATEGORIES },
|
|
462
466
|
reason: { type: "string" },
|
|
463
467
|
},
|
|
464
|
-
required: ["scope", "
|
|
468
|
+
required: ["scope", "secretId"],
|
|
465
469
|
},
|
|
466
470
|
execute: async (_id, params) => {
|
|
467
471
|
const scope = parseScope(params.scope);
|
|
468
|
-
const scopeId =
|
|
472
|
+
const scopeId = resolveScopeId(scope, params, ctx);
|
|
469
473
|
const secretId = parseSecretId(params.secretId);
|
|
470
474
|
const secretName = typeof params.secretName === "string" ? parseSecretName(params.secretName) : undefined;
|
|
471
475
|
const description = typeof params.description === "string" ? params.description : undefined;
|
|
@@ -480,7 +484,7 @@ export default {
|
|
|
480
484
|
},
|
|
481
485
|
}), { names: ["secret_update_metadata"] });
|
|
482
486
|
// ─── secret_search ──────────────────────────────────────────
|
|
483
|
-
api.registerTool(() => ({
|
|
487
|
+
api.registerTool((ctx) => ({
|
|
484
488
|
name: "secret_search",
|
|
485
489
|
label: "Search Secrets",
|
|
486
490
|
description: "Find secrets by category, tag, or field key via the byFacet GSI.",
|
|
@@ -488,16 +492,16 @@ export default {
|
|
|
488
492
|
type: "object",
|
|
489
493
|
properties: {
|
|
490
494
|
scope: { type: "string", enum: VALID_SCOPES },
|
|
491
|
-
scopeId: { type: "string" },
|
|
495
|
+
scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
|
|
492
496
|
category: { type: "string", enum: VALID_CATEGORIES },
|
|
493
497
|
tag: { type: "string" },
|
|
494
498
|
fieldKey: { type: "string" },
|
|
495
499
|
},
|
|
496
|
-
required: ["scope"
|
|
500
|
+
required: ["scope"],
|
|
497
501
|
},
|
|
498
502
|
execute: async (_id, params) => {
|
|
499
503
|
const scope = parseScope(params.scope);
|
|
500
|
-
const scopeId =
|
|
504
|
+
const scopeId = resolveScopeId(scope, params, ctx);
|
|
501
505
|
const category = typeof params.category === "string" ? params.category : undefined;
|
|
502
506
|
const tag = typeof params.tag === "string" ? params.tag : undefined;
|
|
503
507
|
const fieldKey = typeof params.fieldKey === "string" ? params.fieldKey : undefined;
|
|
@@ -506,7 +510,7 @@ export default {
|
|
|
506
510
|
},
|
|
507
511
|
}), { names: ["secret_search"] });
|
|
508
512
|
// ─── secret_get_history ─────────────────────────────────────
|
|
509
|
-
api.registerTool(() => ({
|
|
513
|
+
api.registerTool((ctx) => ({
|
|
510
514
|
name: "secret_get_history",
|
|
511
515
|
label: "Get Secret History",
|
|
512
516
|
description: "Bounded changelog read — metadata-only audit entries (no field values).",
|
|
@@ -514,16 +518,16 @@ export default {
|
|
|
514
518
|
type: "object",
|
|
515
519
|
properties: {
|
|
516
520
|
scope: { type: "string", enum: VALID_SCOPES },
|
|
517
|
-
scopeId: { type: "string" },
|
|
521
|
+
scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
|
|
518
522
|
secretId: { type: "string" },
|
|
519
523
|
limit: { type: "number" },
|
|
520
524
|
cursor: { type: "string" },
|
|
521
525
|
},
|
|
522
|
-
required: ["scope", "
|
|
526
|
+
required: ["scope", "secretId"],
|
|
523
527
|
},
|
|
524
528
|
execute: async (_id, params) => {
|
|
525
529
|
const scope = parseScope(params.scope);
|
|
526
|
-
const scopeId =
|
|
530
|
+
const scopeId = resolveScopeId(scope, params, ctx);
|
|
527
531
|
const secretId = parseSecretId(params.secretId);
|
|
528
532
|
const limit = typeof params.limit === "number" ? params.limit : undefined;
|
|
529
533
|
const cursor = typeof params.cursor === "string" ? params.cursor : undefined;
|
|
@@ -531,7 +535,7 @@ export default {
|
|
|
531
535
|
},
|
|
532
536
|
}), { names: ["secret_get_history"] });
|
|
533
537
|
// ─── secret_delete ──────────────────────────────────────────
|
|
534
|
-
api.registerTool(() => ({
|
|
538
|
+
api.registerTool((ctx) => ({
|
|
535
539
|
name: "secret_delete",
|
|
536
540
|
label: "Delete Secret",
|
|
537
541
|
description: "Delete a secret and all its fields, tags, and changelog rows.",
|
|
@@ -539,14 +543,14 @@ export default {
|
|
|
539
543
|
type: "object",
|
|
540
544
|
properties: {
|
|
541
545
|
scope: { type: "string", enum: VALID_SCOPES },
|
|
542
|
-
scopeId: { type: "string" },
|
|
546
|
+
scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
|
|
543
547
|
secretId: { type: "string" },
|
|
544
548
|
},
|
|
545
|
-
required: ["scope", "
|
|
549
|
+
required: ["scope", "secretId"],
|
|
546
550
|
},
|
|
547
551
|
execute: async (_id, params) => {
|
|
548
552
|
const scope = parseScope(params.scope);
|
|
549
|
-
const scopeId =
|
|
553
|
+
const scopeId = resolveScopeId(scope, params, ctx);
|
|
550
554
|
const secretId = parseSecretId(params.secretId);
|
|
551
555
|
await client.deleteSecret({ scope, scopeId, secretId });
|
|
552
556
|
logger.info("Secret deleted", { scope, scopeId, secretId });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { SecretScope } from "@alfe.ai/agent-api-client";
|
|
2
|
+
export interface ToolContextLike {
|
|
3
|
+
agentId?: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Resolve `scopeId` for a tool call.
|
|
7
|
+
*
|
|
8
|
+
* For `scope === "agent"` the canonical value is the current agent's own ID.
|
|
9
|
+
* Agents only ever operate on their own per-agent scope (the server enforces
|
|
10
|
+
* via requireAgentSelfScope). We accept three inputs and normalise to the
|
|
11
|
+
* agent's ID:
|
|
12
|
+
*
|
|
13
|
+
* - omitted or empty → fill from ctx.agentId
|
|
14
|
+
* - the literal string "agent" → fill from ctx.agentId (LLM mistake)
|
|
15
|
+
* - a real ID (e.g. "agt_…") → use as-is
|
|
16
|
+
*
|
|
17
|
+
* Other scopes (org/team/project) require an explicit scopeId from the
|
|
18
|
+
* `secret_list_scopes` tool — they have no sensible default.
|
|
19
|
+
*/
|
|
20
|
+
export declare function resolveScopeId(scope: SecretScope, params: Record<string, unknown>, ctx: ToolContextLike): string;
|
|
21
|
+
export declare const SCOPE_ID_DESCRIPTION = "For org/team/project scope: the concrete ID from `secret_list_scopes`. For agent scope: optional \u2014 defaults to the current agent's own ID. Never pass the literal word \"agent\" as the ID; pass the real agent ID (or omit it).";
|
|
22
|
+
//# sourceMappingURL=scope-resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-resolve.d.ts","sourceRoot":"","sources":["../src/scope-resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAE7D,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,WAAW,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,GAAG,EAAE,eAAe,GACnB,MAAM,CAwBR;AAED,eAAO,MAAM,oBAAoB,0OACmM,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolve `scopeId` for a tool call.
|
|
3
|
+
*
|
|
4
|
+
* For `scope === "agent"` the canonical value is the current agent's own ID.
|
|
5
|
+
* Agents only ever operate on their own per-agent scope (the server enforces
|
|
6
|
+
* via requireAgentSelfScope). We accept three inputs and normalise to the
|
|
7
|
+
* agent's ID:
|
|
8
|
+
*
|
|
9
|
+
* - omitted or empty → fill from ctx.agentId
|
|
10
|
+
* - the literal string "agent" → fill from ctx.agentId (LLM mistake)
|
|
11
|
+
* - a real ID (e.g. "agt_…") → use as-is
|
|
12
|
+
*
|
|
13
|
+
* Other scopes (org/team/project) require an explicit scopeId from the
|
|
14
|
+
* `secret_list_scopes` tool — they have no sensible default.
|
|
15
|
+
*/
|
|
16
|
+
export function resolveScopeId(scope, params, ctx) {
|
|
17
|
+
if (scope === "agent") {
|
|
18
|
+
const explicit = typeof params.scopeId === "string" &&
|
|
19
|
+
params.scopeId !== "agent" &&
|
|
20
|
+
params.scopeId.length > 0
|
|
21
|
+
? params.scopeId
|
|
22
|
+
: undefined;
|
|
23
|
+
const fallback = ctx.agentId;
|
|
24
|
+
const resolved = explicit ?? fallback ?? "";
|
|
25
|
+
if (!resolved) {
|
|
26
|
+
throw new Error("agent scope requires either ctx.agentId from the runtime or an explicit agent scopeId from secret_list_scopes");
|
|
27
|
+
}
|
|
28
|
+
return resolved;
|
|
29
|
+
}
|
|
30
|
+
if (typeof params.scopeId !== "string" || params.scopeId.length === 0) {
|
|
31
|
+
throw new Error("scopeId is required");
|
|
32
|
+
}
|
|
33
|
+
if (params.scopeId.length > 256) {
|
|
34
|
+
throw new Error("scopeId must be 256 characters or fewer");
|
|
35
|
+
}
|
|
36
|
+
return params.scopeId;
|
|
37
|
+
}
|
|
38
|
+
export const SCOPE_ID_DESCRIPTION = "For org/team/project scope: the concrete ID from `secret_list_scopes`. For agent scope: optional — defaults to the current agent's own ID. Never pass the literal word \"agent\" as the ID; pass the real agent ID (or omit it).";
|
|
39
|
+
//# sourceMappingURL=scope-resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-resolve.js","sourceRoot":"","sources":["../src/scope-resolve.ts"],"names":[],"mappings":"AAMA;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAkB,EAClB,MAA+B,EAC/B,GAAoB;IAEpB,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QACtB,MAAM,QAAQ,GACZ,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;YAClC,MAAM,CAAC,OAAO,KAAK,OAAO;YAC1B,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YACvB,CAAC,CAAC,MAAM,CAAC,OAAO;YAChB,CAAC,CAAC,SAAS,CAAC;QAChB,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC;QAC7B,MAAM,QAAQ,GAAG,QAAQ,IAAI,QAAQ,IAAI,EAAE,CAAC;QAC5C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,IAAI,KAAK,CACb,+GAA+G,CAChH,CAAC;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,IAAI,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtE,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACzC,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,MAAM,oBAAoB,GAC/B,kOAAkO,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alfe.ai/openclaw-secrets",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "OpenClaw plugin — per-scope (org/team/project/agent) encrypted secret store. Agents encrypt/decrypt locally with AES-256-GCM; KMS data keys are fetched via the Alfe secrets service.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
},
|
|
13
13
|
"license": "UNLICENSED",
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@alfe.ai/agent-api-client": "0.1.
|
|
15
|
+
"@alfe.ai/agent-api-client": "0.1.2",
|
|
16
16
|
"@alfe.ai/config": "0.0.8"
|
|
17
17
|
},
|
|
18
18
|
"devDependencies": {
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit coverage for the scopeId auto-fill helper. The plugin used to
|
|
3
|
+
* require an explicit scopeId for every tool call, which led LLMs to
|
|
4
|
+
* pass the literal word "agent" as the ID. This helper closes the gap
|
|
5
|
+
* by filling from ctx.agentId when scope=agent and the LLM either
|
|
6
|
+
* omits scopeId or sets it to "agent".
|
|
7
|
+
*/
|
|
8
|
+
import { describe, it, expect } from "vitest";
|
|
9
|
+
import { resolveScopeId } from "../scope-resolve.js";
|
|
10
|
+
|
|
11
|
+
describe("resolveScopeId — agent scope", () => {
|
|
12
|
+
const ctx = { agentId: "agt_01TEST" };
|
|
13
|
+
|
|
14
|
+
it("falls back to ctx.agentId when scopeId is omitted", () => {
|
|
15
|
+
expect(resolveScopeId("agent", {}, ctx)).toBe("agt_01TEST");
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it("falls back to ctx.agentId when scopeId is empty string", () => {
|
|
19
|
+
expect(resolveScopeId("agent", { scopeId: "" }, ctx)).toBe("agt_01TEST");
|
|
20
|
+
});
|
|
21
|
+
|
|
22
|
+
it("falls back to ctx.agentId when scopeId is the literal 'agent'", () => {
|
|
23
|
+
expect(resolveScopeId("agent", { scopeId: "agent" }, ctx)).toBe("agt_01TEST");
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it("uses an explicit real agent ID as-is", () => {
|
|
27
|
+
expect(resolveScopeId("agent", { scopeId: "agt_01OTHER" }, ctx)).toBe("agt_01OTHER");
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it("throws when ctx.agentId is missing and no usable scopeId is provided", () => {
|
|
31
|
+
expect(() => resolveScopeId("agent", {}, {})).toThrow(/agent scope requires/);
|
|
32
|
+
expect(() => resolveScopeId("agent", { scopeId: "agent" }, {})).toThrow(/agent scope requires/);
|
|
33
|
+
});
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
describe("resolveScopeId — non-agent scopes", () => {
|
|
37
|
+
const ctx = { agentId: "agt_01TEST" };
|
|
38
|
+
|
|
39
|
+
it("requires an explicit scopeId for org scope", () => {
|
|
40
|
+
expect(() => resolveScopeId("org", {}, ctx)).toThrow(/scopeId is required/);
|
|
41
|
+
expect(() => resolveScopeId("org", { scopeId: "" }, ctx)).toThrow(/scopeId is required/);
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it("returns the explicit scopeId for team scope", () => {
|
|
45
|
+
expect(resolveScopeId("team", { scopeId: "team_x" }, ctx)).toBe("team_x");
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
it("returns the explicit scopeId for project scope", () => {
|
|
49
|
+
expect(resolveScopeId("project", { scopeId: "proj_y" }, ctx)).toBe("proj_y");
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
it("rejects scopeIds longer than 256 characters", () => {
|
|
53
|
+
const tooLong = "x".repeat(257);
|
|
54
|
+
expect(() => resolveScopeId("org", { scopeId: tooLong }, ctx)).toThrow(/256 characters/);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it("ignores ctx.agentId for non-agent scopes — explicit scopeId always wins", () => {
|
|
58
|
+
expect(resolveScopeId("team", { scopeId: "team_x" }, { agentId: "agt_other" })).toBe(
|
|
59
|
+
"team_x",
|
|
60
|
+
);
|
|
61
|
+
});
|
|
62
|
+
});
|
package/src/index.ts
CHANGED
|
@@ -101,6 +101,11 @@ function parseString(raw: unknown, field: string, max = 256): string {
|
|
|
101
101
|
return raw;
|
|
102
102
|
}
|
|
103
103
|
|
|
104
|
+
// Re-export the local-friendly type alias so the rest of the file
|
|
105
|
+
// continues to refer to ToolContext (which has agentId? on it). The
|
|
106
|
+
// scope-resolve helper is structurally compatible.
|
|
107
|
+
import { resolveScopeId, SCOPE_ID_DESCRIPTION } from "./scope-resolve.js";
|
|
108
|
+
|
|
104
109
|
function parseSecretName(raw: unknown): string {
|
|
105
110
|
const s = parseString(raw, "name", 128);
|
|
106
111
|
if (!NAME_REGEX.test(s)) {
|
|
@@ -191,7 +196,7 @@ export default {
|
|
|
191
196
|
api.registerTool(() => ({
|
|
192
197
|
name: "secret_list_scopes",
|
|
193
198
|
label: "List Secret Scopes",
|
|
194
|
-
description: "List scopes (org/team/project/agent) the agent can manage secrets in.",
|
|
199
|
+
description: "List scopes (org/team/project/agent) the agent can manage secrets in. The returned `scopeId` values are the IDs to pass into the other secret tools — never pass the literal word \"agent\" as a scopeId; for agent scope, omit scopeId and the runtime will fill in the current agent's ID.",
|
|
195
200
|
parameters: { type: "object", properties: {} },
|
|
196
201
|
execute: async () => {
|
|
197
202
|
const scopes = await client.listSecretScopes();
|
|
@@ -200,7 +205,7 @@ export default {
|
|
|
200
205
|
}), { names: ["secret_list_scopes"] });
|
|
201
206
|
|
|
202
207
|
// ─── secret_list ────────────────────────────────────────────
|
|
203
|
-
api.registerTool(() => ({
|
|
208
|
+
api.registerTool((ctx) => ({
|
|
204
209
|
name: "secret_list",
|
|
205
210
|
label: "List Secrets",
|
|
206
211
|
description: "List secret metadata in a scope. Optional category/tag/fieldKey filters route through the byFacet GSI.",
|
|
@@ -208,16 +213,16 @@ export default {
|
|
|
208
213
|
type: "object",
|
|
209
214
|
properties: {
|
|
210
215
|
scope: { type: "string", enum: VALID_SCOPES },
|
|
211
|
-
scopeId: { type: "string" },
|
|
216
|
+
scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
|
|
212
217
|
category: { type: "string", enum: VALID_CATEGORIES },
|
|
213
218
|
tag: { type: "string" },
|
|
214
219
|
fieldKey: { type: "string" },
|
|
215
220
|
},
|
|
216
|
-
required: ["scope"
|
|
221
|
+
required: ["scope"],
|
|
217
222
|
},
|
|
218
223
|
execute: async (_id, params) => {
|
|
219
224
|
const scope = parseScope(params.scope);
|
|
220
|
-
const scopeId =
|
|
225
|
+
const scopeId = resolveScopeId(scope, params, ctx);
|
|
221
226
|
const category = typeof params.category === "string" ? params.category as SecretCategory : undefined;
|
|
222
227
|
const tag = typeof params.tag === "string" ? params.tag : undefined;
|
|
223
228
|
const fieldKey = typeof params.fieldKey === "string" ? params.fieldKey : undefined;
|
|
@@ -227,7 +232,7 @@ export default {
|
|
|
227
232
|
}), { names: ["secret_list"] });
|
|
228
233
|
|
|
229
234
|
// ─── secret_set ─────────────────────────────────────────────
|
|
230
|
-
api.registerTool(() => ({
|
|
235
|
+
api.registerTool((ctx) => ({
|
|
231
236
|
name: "secret_set",
|
|
232
237
|
label: "Set Secret",
|
|
233
238
|
description: "Create a new secret with one or more fields. Encrypted fields are sealed locally before upload.",
|
|
@@ -235,7 +240,7 @@ export default {
|
|
|
235
240
|
type: "object",
|
|
236
241
|
properties: {
|
|
237
242
|
scope: { type: "string", enum: VALID_SCOPES },
|
|
238
|
-
scopeId: { type: "string" },
|
|
243
|
+
scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
|
|
239
244
|
name: { type: "string", description: "Human-readable secret name (unique within scope)" },
|
|
240
245
|
category: { type: "string", enum: VALID_CATEGORIES, description: "Defaults to 'other'" },
|
|
241
246
|
description: { type: "string" },
|
|
@@ -259,11 +264,11 @@ export default {
|
|
|
259
264
|
value: { type: "string", description: "Shorthand for fields=[{ key: 'value', sensitivity: 'encrypted', value }]" },
|
|
260
265
|
reason: { type: "string" },
|
|
261
266
|
},
|
|
262
|
-
required: ["scope", "
|
|
267
|
+
required: ["scope", "name"],
|
|
263
268
|
},
|
|
264
269
|
execute: async (_id, params) => {
|
|
265
270
|
const scope = parseScope(params.scope);
|
|
266
|
-
const scopeId =
|
|
271
|
+
const scopeId = resolveScopeId(scope, params, ctx);
|
|
267
272
|
const name = parseSecretName(params.name);
|
|
268
273
|
const category = typeof params.category === "string"
|
|
269
274
|
? params.category as SecretCategory
|
|
@@ -308,7 +313,7 @@ export default {
|
|
|
308
313
|
}), { names: ["secret_set"] });
|
|
309
314
|
|
|
310
315
|
// ─── secret_get (legacy: returns `value` field plaintext as a string) ──
|
|
311
|
-
api.registerTool(() => ({
|
|
316
|
+
api.registerTool((ctx) => ({
|
|
312
317
|
name: "secret_get",
|
|
313
318
|
label: "Get Secret (Legacy)",
|
|
314
319
|
description: "Fetch and decrypt the `value`-keyed field. The output is SENSITIVE; do not echo or log.",
|
|
@@ -316,14 +321,14 @@ export default {
|
|
|
316
321
|
type: "object",
|
|
317
322
|
properties: {
|
|
318
323
|
scope: { type: "string", enum: VALID_SCOPES },
|
|
319
|
-
scopeId: { type: "string" },
|
|
324
|
+
scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
|
|
320
325
|
secretId: { type: "string" },
|
|
321
326
|
},
|
|
322
|
-
required: ["scope", "
|
|
327
|
+
required: ["scope", "secretId"],
|
|
323
328
|
},
|
|
324
329
|
execute: async (_id, params) => {
|
|
325
330
|
const scope = parseScope(params.scope);
|
|
326
|
-
const scopeId =
|
|
331
|
+
const scopeId = resolveScopeId(scope, params, ctx);
|
|
327
332
|
const secretId = parseSecretId(params.secretId);
|
|
328
333
|
const field = await client.getSecretField({ scope, scopeId, secretId, fieldKey: "value" });
|
|
329
334
|
if (field.sensitivity === "plaintext") {
|
|
@@ -338,7 +343,7 @@ export default {
|
|
|
338
343
|
}), { names: ["secret_get"] });
|
|
339
344
|
|
|
340
345
|
// ─── secret_get_full ────────────────────────────────────────
|
|
341
|
-
api.registerTool(() => ({
|
|
346
|
+
api.registerTool((ctx) => ({
|
|
342
347
|
name: "secret_get_full",
|
|
343
348
|
label: "Get Secret (All Fields)",
|
|
344
349
|
description: "Fetch the secret aggregate with all fields decrypted. Output is SENSITIVE.",
|
|
@@ -346,14 +351,14 @@ export default {
|
|
|
346
351
|
type: "object",
|
|
347
352
|
properties: {
|
|
348
353
|
scope: { type: "string", enum: VALID_SCOPES },
|
|
349
|
-
scopeId: { type: "string" },
|
|
354
|
+
scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
|
|
350
355
|
secretId: { type: "string" },
|
|
351
356
|
},
|
|
352
|
-
required: ["scope", "
|
|
357
|
+
required: ["scope", "secretId"],
|
|
353
358
|
},
|
|
354
359
|
execute: async (_id, params) => {
|
|
355
360
|
const scope = parseScope(params.scope);
|
|
356
|
-
const scopeId =
|
|
361
|
+
const scopeId = resolveScopeId(scope, params, ctx);
|
|
357
362
|
const secretId = parseSecretId(params.secretId);
|
|
358
363
|
const { aggregate, envelopes } = await client.getSecret({ scope, scopeId, secretId });
|
|
359
364
|
|
|
@@ -381,7 +386,7 @@ export default {
|
|
|
381
386
|
}), { names: ["secret_get_full"] });
|
|
382
387
|
|
|
383
388
|
// ─── secret_get_field ───────────────────────────────────────
|
|
384
|
-
api.registerTool(() => ({
|
|
389
|
+
api.registerTool((ctx) => ({
|
|
385
390
|
name: "secret_get_field",
|
|
386
391
|
label: "Get Secret Field",
|
|
387
392
|
description: "Fetch and decrypt one field by key. Cheaper than secret_get_full when you only need one piece.",
|
|
@@ -389,15 +394,15 @@ export default {
|
|
|
389
394
|
type: "object",
|
|
390
395
|
properties: {
|
|
391
396
|
scope: { type: "string", enum: VALID_SCOPES },
|
|
392
|
-
scopeId: { type: "string" },
|
|
397
|
+
scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
|
|
393
398
|
secretId: { type: "string" },
|
|
394
399
|
fieldKey: { type: "string" },
|
|
395
400
|
},
|
|
396
|
-
required: ["scope", "
|
|
401
|
+
required: ["scope", "secretId", "fieldKey"],
|
|
397
402
|
},
|
|
398
403
|
execute: async (_id, params) => {
|
|
399
404
|
const scope = parseScope(params.scope);
|
|
400
|
-
const scopeId =
|
|
405
|
+
const scopeId = resolveScopeId(scope, params, ctx);
|
|
401
406
|
const secretId = parseSecretId(params.secretId);
|
|
402
407
|
const fieldKey = parseFieldKey(params.fieldKey);
|
|
403
408
|
const field = await client.getSecretField({ scope, scopeId, secretId, fieldKey });
|
|
@@ -413,7 +418,7 @@ export default {
|
|
|
413
418
|
}), { names: ["secret_get_field"] });
|
|
414
419
|
|
|
415
420
|
// ─── secret_set_field ───────────────────────────────────────
|
|
416
|
-
api.registerTool(() => ({
|
|
421
|
+
api.registerTool((ctx) => ({
|
|
417
422
|
name: "secret_set_field",
|
|
418
423
|
label: "Set Secret Field",
|
|
419
424
|
description: "Add OR rotate one field. Same key as existing = rotate; new key = add. Encrypted fields are sealed locally.",
|
|
@@ -421,7 +426,7 @@ export default {
|
|
|
421
426
|
type: "object",
|
|
422
427
|
properties: {
|
|
423
428
|
scope: { type: "string", enum: VALID_SCOPES },
|
|
424
|
-
scopeId: { type: "string" },
|
|
429
|
+
scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
|
|
425
430
|
secretId: { type: "string" },
|
|
426
431
|
fieldKey: { type: "string" },
|
|
427
432
|
sensitivity: { type: "string", enum: VALID_SENSITIVITIES },
|
|
@@ -429,11 +434,11 @@ export default {
|
|
|
429
434
|
value: { type: "string" },
|
|
430
435
|
reason: { type: "string" },
|
|
431
436
|
},
|
|
432
|
-
required: ["scope", "
|
|
437
|
+
required: ["scope", "secretId", "fieldKey", "sensitivity", "value"],
|
|
433
438
|
},
|
|
434
439
|
execute: async (_id, params) => {
|
|
435
440
|
const scope = parseScope(params.scope);
|
|
436
|
-
const scopeId =
|
|
441
|
+
const scopeId = resolveScopeId(scope, params, ctx);
|
|
437
442
|
const secretId = parseSecretId(params.secretId);
|
|
438
443
|
const fieldKey = parseFieldKey(params.fieldKey);
|
|
439
444
|
const sensitivity = (() => {
|
|
@@ -474,7 +479,7 @@ export default {
|
|
|
474
479
|
}), { names: ["secret_set_field"] });
|
|
475
480
|
|
|
476
481
|
// ─── secret_remove_field ────────────────────────────────────
|
|
477
|
-
api.registerTool(() => ({
|
|
482
|
+
api.registerTool((ctx) => ({
|
|
478
483
|
name: "secret_remove_field",
|
|
479
484
|
label: "Remove Secret Field",
|
|
480
485
|
description: "Remove one field from a secret. Other fields untouched.",
|
|
@@ -482,15 +487,15 @@ export default {
|
|
|
482
487
|
type: "object",
|
|
483
488
|
properties: {
|
|
484
489
|
scope: { type: "string", enum: VALID_SCOPES },
|
|
485
|
-
scopeId: { type: "string" },
|
|
490
|
+
scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
|
|
486
491
|
secretId: { type: "string" },
|
|
487
492
|
fieldKey: { type: "string" },
|
|
488
493
|
},
|
|
489
|
-
required: ["scope", "
|
|
494
|
+
required: ["scope", "secretId", "fieldKey"],
|
|
490
495
|
},
|
|
491
496
|
execute: async (_id, params) => {
|
|
492
497
|
const scope = parseScope(params.scope);
|
|
493
|
-
const scopeId =
|
|
498
|
+
const scopeId = resolveScopeId(scope, params, ctx);
|
|
494
499
|
const secretId = parseSecretId(params.secretId);
|
|
495
500
|
const fieldKey = parseFieldKey(params.fieldKey);
|
|
496
501
|
await client.removeSecretField({ scope, scopeId, secretId, fieldKey });
|
|
@@ -500,7 +505,7 @@ export default {
|
|
|
500
505
|
}), { names: ["secret_remove_field"] });
|
|
501
506
|
|
|
502
507
|
// ─── secret_update_metadata ─────────────────────────────────
|
|
503
|
-
api.registerTool(() => ({
|
|
508
|
+
api.registerTool((ctx) => ({
|
|
504
509
|
name: "secret_update_metadata",
|
|
505
510
|
label: "Update Secret Metadata",
|
|
506
511
|
description: "Patch secret-level metadata (name, description, tags, category). Does not touch fields.",
|
|
@@ -508,7 +513,7 @@ export default {
|
|
|
508
513
|
type: "object",
|
|
509
514
|
properties: {
|
|
510
515
|
scope: { type: "string", enum: VALID_SCOPES },
|
|
511
|
-
scopeId: { type: "string" },
|
|
516
|
+
scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
|
|
512
517
|
secretId: { type: "string" },
|
|
513
518
|
secretName: { type: "string" },
|
|
514
519
|
description: { type: "string" },
|
|
@@ -516,11 +521,11 @@ export default {
|
|
|
516
521
|
category: { type: "string", enum: VALID_CATEGORIES },
|
|
517
522
|
reason: { type: "string" },
|
|
518
523
|
},
|
|
519
|
-
required: ["scope", "
|
|
524
|
+
required: ["scope", "secretId"],
|
|
520
525
|
},
|
|
521
526
|
execute: async (_id, params) => {
|
|
522
527
|
const scope = parseScope(params.scope);
|
|
523
|
-
const scopeId =
|
|
528
|
+
const scopeId = resolveScopeId(scope, params, ctx);
|
|
524
529
|
const secretId = parseSecretId(params.secretId);
|
|
525
530
|
const secretName = typeof params.secretName === "string" ? parseSecretName(params.secretName) : undefined;
|
|
526
531
|
const description = typeof params.description === "string" ? params.description : undefined;
|
|
@@ -536,7 +541,7 @@ export default {
|
|
|
536
541
|
}), { names: ["secret_update_metadata"] });
|
|
537
542
|
|
|
538
543
|
// ─── secret_search ──────────────────────────────────────────
|
|
539
|
-
api.registerTool(() => ({
|
|
544
|
+
api.registerTool((ctx) => ({
|
|
540
545
|
name: "secret_search",
|
|
541
546
|
label: "Search Secrets",
|
|
542
547
|
description: "Find secrets by category, tag, or field key via the byFacet GSI.",
|
|
@@ -544,16 +549,16 @@ export default {
|
|
|
544
549
|
type: "object",
|
|
545
550
|
properties: {
|
|
546
551
|
scope: { type: "string", enum: VALID_SCOPES },
|
|
547
|
-
scopeId: { type: "string" },
|
|
552
|
+
scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
|
|
548
553
|
category: { type: "string", enum: VALID_CATEGORIES },
|
|
549
554
|
tag: { type: "string" },
|
|
550
555
|
fieldKey: { type: "string" },
|
|
551
556
|
},
|
|
552
|
-
required: ["scope"
|
|
557
|
+
required: ["scope"],
|
|
553
558
|
},
|
|
554
559
|
execute: async (_id, params) => {
|
|
555
560
|
const scope = parseScope(params.scope);
|
|
556
|
-
const scopeId =
|
|
561
|
+
const scopeId = resolveScopeId(scope, params, ctx);
|
|
557
562
|
const category = typeof params.category === "string" ? params.category as SecretCategory : undefined;
|
|
558
563
|
const tag = typeof params.tag === "string" ? params.tag : undefined;
|
|
559
564
|
const fieldKey = typeof params.fieldKey === "string" ? params.fieldKey : undefined;
|
|
@@ -563,7 +568,7 @@ export default {
|
|
|
563
568
|
}), { names: ["secret_search"] });
|
|
564
569
|
|
|
565
570
|
// ─── secret_get_history ─────────────────────────────────────
|
|
566
|
-
api.registerTool(() => ({
|
|
571
|
+
api.registerTool((ctx) => ({
|
|
567
572
|
name: "secret_get_history",
|
|
568
573
|
label: "Get Secret History",
|
|
569
574
|
description: "Bounded changelog read — metadata-only audit entries (no field values).",
|
|
@@ -571,16 +576,16 @@ export default {
|
|
|
571
576
|
type: "object",
|
|
572
577
|
properties: {
|
|
573
578
|
scope: { type: "string", enum: VALID_SCOPES },
|
|
574
|
-
scopeId: { type: "string" },
|
|
579
|
+
scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
|
|
575
580
|
secretId: { type: "string" },
|
|
576
581
|
limit: { type: "number" },
|
|
577
582
|
cursor: { type: "string" },
|
|
578
583
|
},
|
|
579
|
-
required: ["scope", "
|
|
584
|
+
required: ["scope", "secretId"],
|
|
580
585
|
},
|
|
581
586
|
execute: async (_id, params) => {
|
|
582
587
|
const scope = parseScope(params.scope);
|
|
583
|
-
const scopeId =
|
|
588
|
+
const scopeId = resolveScopeId(scope, params, ctx);
|
|
584
589
|
const secretId = parseSecretId(params.secretId);
|
|
585
590
|
const limit = typeof params.limit === "number" ? params.limit : undefined;
|
|
586
591
|
const cursor = typeof params.cursor === "string" ? params.cursor : undefined;
|
|
@@ -589,7 +594,7 @@ export default {
|
|
|
589
594
|
}), { names: ["secret_get_history"] });
|
|
590
595
|
|
|
591
596
|
// ─── secret_delete ──────────────────────────────────────────
|
|
592
|
-
api.registerTool(() => ({
|
|
597
|
+
api.registerTool((ctx) => ({
|
|
593
598
|
name: "secret_delete",
|
|
594
599
|
label: "Delete Secret",
|
|
595
600
|
description: "Delete a secret and all its fields, tags, and changelog rows.",
|
|
@@ -597,14 +602,14 @@ export default {
|
|
|
597
602
|
type: "object",
|
|
598
603
|
properties: {
|
|
599
604
|
scope: { type: "string", enum: VALID_SCOPES },
|
|
600
|
-
scopeId: { type: "string" },
|
|
605
|
+
scopeId: { type: "string", description: SCOPE_ID_DESCRIPTION },
|
|
601
606
|
secretId: { type: "string" },
|
|
602
607
|
},
|
|
603
|
-
required: ["scope", "
|
|
608
|
+
required: ["scope", "secretId"],
|
|
604
609
|
},
|
|
605
610
|
execute: async (_id, params) => {
|
|
606
611
|
const scope = parseScope(params.scope);
|
|
607
|
-
const scopeId =
|
|
612
|
+
const scopeId = resolveScopeId(scope, params, ctx);
|
|
608
613
|
const secretId = parseSecretId(params.secretId);
|
|
609
614
|
await client.deleteSecret({ scope, scopeId, secretId });
|
|
610
615
|
logger.info("Secret deleted", { scope, scopeId, secretId });
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { SecretScope } from "@alfe.ai/agent-api-client";
|
|
2
|
+
|
|
3
|
+
export interface ToolContextLike {
|
|
4
|
+
agentId?: string;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* Resolve `scopeId` for a tool call.
|
|
9
|
+
*
|
|
10
|
+
* For `scope === "agent"` the canonical value is the current agent's own ID.
|
|
11
|
+
* Agents only ever operate on their own per-agent scope (the server enforces
|
|
12
|
+
* via requireAgentSelfScope). We accept three inputs and normalise to the
|
|
13
|
+
* agent's ID:
|
|
14
|
+
*
|
|
15
|
+
* - omitted or empty → fill from ctx.agentId
|
|
16
|
+
* - the literal string "agent" → fill from ctx.agentId (LLM mistake)
|
|
17
|
+
* - a real ID (e.g. "agt_…") → use as-is
|
|
18
|
+
*
|
|
19
|
+
* Other scopes (org/team/project) require an explicit scopeId from the
|
|
20
|
+
* `secret_list_scopes` tool — they have no sensible default.
|
|
21
|
+
*/
|
|
22
|
+
export function resolveScopeId(
|
|
23
|
+
scope: SecretScope,
|
|
24
|
+
params: Record<string, unknown>,
|
|
25
|
+
ctx: ToolContextLike,
|
|
26
|
+
): string {
|
|
27
|
+
if (scope === "agent") {
|
|
28
|
+
const explicit =
|
|
29
|
+
typeof params.scopeId === "string" &&
|
|
30
|
+
params.scopeId !== "agent" &&
|
|
31
|
+
params.scopeId.length > 0
|
|
32
|
+
? params.scopeId
|
|
33
|
+
: undefined;
|
|
34
|
+
const fallback = ctx.agentId;
|
|
35
|
+
const resolved = explicit ?? fallback ?? "";
|
|
36
|
+
if (!resolved) {
|
|
37
|
+
throw new Error(
|
|
38
|
+
"agent scope requires either ctx.agentId from the runtime or an explicit agent scopeId from secret_list_scopes",
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
return resolved;
|
|
42
|
+
}
|
|
43
|
+
if (typeof params.scopeId !== "string" || params.scopeId.length === 0) {
|
|
44
|
+
throw new Error("scopeId is required");
|
|
45
|
+
}
|
|
46
|
+
if (params.scopeId.length > 256) {
|
|
47
|
+
throw new Error("scopeId must be 256 characters or fewer");
|
|
48
|
+
}
|
|
49
|
+
return params.scopeId;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
export const SCOPE_ID_DESCRIPTION =
|
|
53
|
+
"For org/team/project scope: the concrete ID from `secret_list_scopes`. For agent scope: optional — defaults to the current agent's own ID. Never pass the literal word \"agent\" as the ID; pass the real agent ID (or omit it).";
|